我有一个主活动,它承载了很多片段和一个"主页"片段。每次我想添加一个片段时,我都会在 main 活动中调用此方法。
public void addFragment(Fragment fragment) {
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction ft = fragmentManager.beginTransaction();
ft.add(R.id.fragmentContainer, fragment, "new_fragment");
ft.addToBackStack("new_fragment").commit();
}
每当用户按下手机的后退按钮时,我希望"主页"片段是用户在退出应用程序之前看到的最后一页。我该怎么做?我已经在 MainActivity 内的 onBackPressed() 中尝试过这个,但它不起作用(后退按钮不起作用)。
@Override
public void onBackPressed() {
FragmentManager fm = getSupportFragmentManager();
Fragment fragment = fm.findFragmentByTag("new_fragment");
//if fragment is home page fragment, exit application
//else pop the newest fragment or go to home page fragment
if (fragment == fragDefault) {
finish();
} else {
if(fm.getBackStackEntryCount() == 0){
//display home page fragment here
}
}
}
您可以在按下后退按钮/键时检查后退堆栈。
-
添加"主页"片段时,不要将其放在后退堆栈中。
-
在需要时添加所有其他片段,并将它们放入后堆。
-
当用户按下后退按钮/键时,如果后退堆栈为空,退出应用程序,否则从后退堆栈弹出片段。
int count = getFragmentManager().getBackStackEntryCount();
if (count == 0) {
finish();
}
else {
getFragmentManager().popBackStack();
}
或者,
您可能想尝试以下操作:
if (f instanceof HomePageFragmentClass) {
finish();
} else {
//f.dosomething();
}
*我还没有测试过,让我知道它是否有效。