当我创建时,我需要从其他活动中移除一个片段,而不是创建它:
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(本地方法)
我真的会提前帮忙!
答案 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。