我的安卓应用程序实际上有点问题。
我的应用程序包含一个导航抽屉,用于在应用程序内导航。例如
导航抽屉:
- 概述
- 搜索
- 用户
- 东西
当应用程序启动时,我将加载概述片段。如果用户单击其他项目,我将用以下命令更改片段:
final FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.frame_container, fragment, TAG);
transaction.addToBackStack(null);
transaction.commit();
现在的问题是,当用户从 1> 2> 4> 3 切换并按下后退键时,只会给他带来一个片段。 3> 4> 2> 1
所以我添加了代码,这将使他回到每个 Backpress 上的片段 1。
public boolean onKeyDown(int keyCode, KeyEvent event) {
int exit = 0;
if (keyCode == KeyEvent.KEYCODE_BACK) {
getFragmentManager().popBackStack();
FragmentManager fm = getSupportFragmentManager();
Fragment fragment = new Overview();
fm.beginTransaction().add(R.id.frame_container, fragment).addToBackStack("fragBack").commit();
return false;
}
return false;
}
好的,首先还好,但现在我在更深层次上添加了更多片段,但它们不应该在后按时回到片段 1。
例如
- 概述(主要片段)
- 搜索(返回键返回到片段 1)
- 用户(返回键返回到片段 1)
- 东西(返回键回到片段 1)
4.1 详细信息(返回键返回到片段 4。东西)<4.1.1 更多细节(后退键回到片段 4.1)
如果有人知道我如何在我的应用程序中处理导航,那就太好了。
格莱兹
您的代码是正确的,需要更改逻辑。每当您从导航抽屉中取出时,首先使用此代码清除堆栈中的所有片段
private void clearBackStack() {
FragmentManager manager = getSupportFragmentManager();
manager.popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
其次,将相应的选定(1 或 2 或 3)片段添加到堆栈中。
private void navigateToFragment(Fragment fragment, String TAG){
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.frame_container, fragment, TAG);
transaction.addToBackStack(null);
transaction.commit();
}
当你像 2 -> 2.1 -> 2.2 一样深入时,在反向按下时,你会返回 2.2 ->2.1 ->2。无需重写 onKeyDown() 方法并再次添加片段