【问题标题】:remove a fragment with fragment manager android使用片段管理器android删除片段
【发布时间】:2015-11-03 04:38:10
【问题描述】:

在我正在开发的应用程序中,我动态添加片段,现在我想删除它们,但我不能,应用程序崩溃。非常感谢您提前提供的帮助。 这是我的代码

这里声明了我使用的东西

    static int alarmsAmount = 0;
public android.support.v4.app.FragmentManager fragmentManager = getSupportFragmentManager();
public AlarmFragment[] alarmFragment = new AlarmFragment[7];

这是我添加片段的方法

    alarmFragment[getAlarmsAmount()] = new AlarmFragment();
                        alarmFragment[getAlarmsAmount()].setAlarmNumber(getAlarmsAmount());
                        android.support.v4.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
                        fragmentTransaction.add(R.id.alarmListContainer, alarmFragment[getAlarmsAmount()],Integer.toString(getAlarmsAmount()));
                        fragmentTransaction.commit();
                        setAlarmsAmount(getAlarmsAmount() + 1);

现在问题本身

public void removeAlarm(int alarmNumber) {
    Log.d("informatione", Integer.toString(alarmNumber));

    getFragmentManager().beginTransaction().remove(getFragmentManager().findFragmentByTag(Integer.toString(alarmNumber))).commit();


}

错误日志

11-03 01:33:22.634  12942-12942/com.rggmiranda.appE/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.IllegalStateException: Activity has been destroyed
        at android.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1333)
        at android.app.BackStackRecord.commitInternal(BackStackRecord.java:595)
        at android.app.BackStackRecord.commit(BackStackRecord.java:574)
        at com.rggmiranda.app.Alarms.removeAlarm(Alarms.java:66)
        at com.rggmiranda.app.AlarmSettings$1.onClick(AlarmSettings.java:30)
        at android.view.View.performClick(View.java:4340)
        at android.view.View$PerformClick.run(View.java:17642)
        at android.os.Handler.handleCallback(Handler.java:725)
        at android.os.Handler.dispatchMessage(Handler.java:92)
        at android.os.Looper.loop(Looper.java:137)
        at android.app.ActivityThread.main(ActivityThread.java:5185)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:511)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:797)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:564)
        at dalvik.system.NativeStart.main(Native Method)

日志指向getFragmentManager().beginTransaction().remove(getFragmentManager().findFragmentByTag(Integer.toString(alarmNumber))).commit();

【问题讨论】:

    标签: android android-fragments fragment android-fragmentactivity


    【解决方案1】:

    在顶部您使用getSupportFragmentManager(),但在删除时,您使用getFragmentManager()。确保在所有地方都使用getSupportFragmentManager()

    【讨论】:

    • 您好,感谢您的回答,我仍然无法使其正常工作,应用程序在该行崩溃,我也尝试使用 .detach
    • 您确定getFragmentManager().findFragmentByTag(Integer.toString(alarmNumber)) 存在吗?检查调试日志是否为 null 或对象。
    • 对不起,请问我该怎么做?日志是否允许我打印 fragmentManager?
    • 此行前:getFragmentManager().beginTransaction().remove(getFragmentManager().findFragmentByTag(Integer.toString(alarmNumber))).commit(); 添加此行:System.out.println("The fragment is: " + getFragmentManager().findFragmentByTag(Integer.toString(alarmNumber)) 然后检查 logcat 输出。
    • 是的,片段是空的,我会寻找解决方案,但如果你有一些已经煮熟的东西,我会很高兴听到它:)
    猜你喜欢
    • 2015-10-01
    • 2023-03-21
    • 2015-10-07
    • 1970-01-01
    • 2012-01-01
    • 1970-01-01
    • 2019-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多