从其他活动中删除片段

时间:2016-03-08 01:52:18

标签: android android-fragments

当我创建时,我需要从其他活动中移除一个片段,而不是创建它:

public FragmentManager fragmentManager = getSupportFragmentManager();


AlarmFragment frag = new AlarmFragment();
frag.setAlarmNumber(getAlarmsAmount());
getListaDeAlarmas().add(getAlarmsAmount(), frag);
fragmentManager.beginTransaction().add(R.id.alarmListContainer, getListaDeAlarmas().get(alarmsAmount), "Alarm" + String.valueOf(getAlarmsAmount())).commit();

然后我可以从片段中访问另一个活动,假设片段中有一个按钮打开另一个活动,现在,停留在该活动我想要删除活动发起的片段,我得到一个参考通过意图编号到该片段。所以我试过了:

        btDelete.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            getFragmentManager().beginTransaction().remove(getFragmentManager().findFragmentByTag("Alarm" + String.valueOf(alarmNumber))).commit();
        }
    });

但它给了我一个nullPointerException,

03-07 22:42:33.270 30993-30993 / thehippo.rggmiranda.hiposleep E / AndroidRuntime:FATAL EXCEPTION:main                                                                                显示java.lang.NullPointerException                                                                                    在android.app.BackStackRecord.run(BackStackRecord.java:651)                                                                                    在android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1435)                                                                                    在android.app.FragmentManagerImpl $ 1.run(FragmentManager.java:441)                                                                                    在android.os.Handler.handleCallback(Handler.java:725)                                                                                    在android.os.Handler.dispatchMessage(Handler.java:92)                                                                                    在android.os.Looper.loop(Looper.java:137)                                                                                    在android.app.ActivityThread.main(ActivityThread.java:5185)                                                                                    at java.lang.reflect.Method.invokeNative(Native Method)                                                                                    在java.lang.reflect.Method.invoke(Method.java:511)                                                                                    在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:797)                                                                                    在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:564)                                                                                    在dalvik.system.NativeStart.main(本地方法)

我真的会提前帮忙!

1 个答案:

答案 0 :(得分:0)

你可以这样做:

btDelete.setOnClickListener(new View.OnClickListener() {
    public void onClick(View view) {
       Fragment fragment = getSupportFragmentManager().findFragmentByTag("Alarm" + String.valueOf(alarmNumber)));
       if(fragment != null) getSupportFragmentManager().beginTransaction().remove(fragment).commit(); 
    }

让我知道它是否有效。

修改

顺便说一句,您是否已调试此行:"Alarm" + String.valueOf(alarmNumber))以验证它是否为FragmentTag

如果我的回答不起作用,请尝试one

相关问题