这是我的第一个问题。我使用下面的代码删除片段:
private boolean returnBackStackImmediate(FragmentManager fm) {
List<Fragment> fragments = fm.getFragments();
if (fragments != null && fragments.size() > 0) {
for (Fragment fragment : fragments) {
if (fragment.getFragmentManager().getBackStackEntryCount() > 0) {
if (fragment.getFragmentManager().popBackStackImmediate()) {
return true;
} else {
return returnBackStackImmediate(fragment.getChildFragmentManager());
}
}
}
}
return false;
}
现在,我希望在删除片段后,如果用户再次点击后退按钮,我的活动就会关闭。因为我已将这些代码添加到我的活动中:
@Override
public void onBackPressed() {
if (getSupportFragmentManager().getFragments() == null) {
finish();
} else {
if (!returnBackStackImmediate(getSupportFragmentManager())) {
super.onBackPressed();
}
}
}
但是当我按下后退按钮并删除片段并再次按下时我收到此错误:
java.lang.NullPointerException: Attempt to invoke virtual method 'android.support.v4.app.FragmentManager android.support.v4.app.Fragment.getFragmentManager()' on a null object reference
at com.safarayaneh.notify.activities.MainActivity.returnBackStackImmediate(MainActivity.java:501)
at com.safarayaneh.notify.activities.MainActivity.onBackPressed(MainActivity.java:488)
at android.app.Activity.onKeyUp(Activity.java:2477)
at android.view.KeyEvent.dispatch(KeyEvent.java:2664)
at android.app.Activity.dispatchKeyEvent(Activity.java:2730)
我知道片段为空但我可以在这种情况下使用哪种条件?
答案 0 :(得分:4)
试试这个
@Override
public void onBackPressed() {
int count = getSupportFragmentManager().getBackStackEntryCount();
if (count == 0) {
super.onBackPressed();
} else {
getSupportFragmentManager().popBackStackImmediate();
}
}
答案 1 :(得分:0)
getActivity().finish();
答案 2 :(得分:0)
我不确定您为什么要手动编写此代码。如果您将片段添加到活动中,如下所示:
getSupportFragmentManager().beginTransaction().replace(R.id.***YOUR TARGET FRAME ID***, fragment, "some fragment tag")
.addToBackStack(null)
.commit();
然后活动应该自动处理backstack的东西。即不需要对onBackPressed做任何事情。当Backstack中没有更多碎片时,活动将关闭。
如果有特殊原因你手动让我知道,我会删除这个答案(但你可能需要更新问题,因为这个简单的方法确实回答了你的问题!)