Android 如何使用导航抽屉正确替换片段
我使用的是导航抽屉,使用起来很简单。我不是提供完整的代码,而是为您提供细节,您可以很容易理解我的问题。我使用的片段大约有8个,我用一个替换另一个。但问题来了 我将在导航抽屉的单击事件中替换它们。但有两个主要问题Android 如何使用导航抽屉正确替换片段,android,android-fragments,navigation-drawer,Android,Android Fragments,Navigation Drawer,我使用的是导航抽屉,使用起来很简单。我不是提供完整的代码,而是为您提供细节,您可以很容易理解我的问题。我使用的片段大约有8个,我用一个替换另一个。但问题来了 我将在导航抽屉的单击事件中替换它们。但有两个主要问题 替换后,我可以在背景中看到前面的片段。replace方法是否只调用它上面的新片段?如果是,那么我应该如何处理在我的新片段的背景中看不到的旧片段 当我单击导航抽屉项时,它会成功加载特定片段。但是当我再次点击那个特定的项目时,它会一次又一次地加载这个片段。例如,若抽屉项num 3打开片段My
class MyActivity ... {
private String currentFragment;
private void openNewFragment(Fragment fragment) {
String newFragment = fragment.getClass().getSimpleName();
if (newFragment.equals(currentFragment)){
// new fragment already shown
return;
}
// Fragment transaction etc here:
}
}
请注意,这仅比较基于类名的片段。有时这可能不是唯一的,例如,如果有一个DetailFragment类显示有关实体的信息。显示哪些实体详细信息可能取决于意图参数
但是,如果显示了Entity=2的当前详细信息,则上述代码将阻止打开Entity=1的DetailFragment。对于这些场景,需要扩展有关保留片段的信息(例如,存储引用或片段实例本身)。我这样尝试过。我觉得很好
FragmentManager frgmanager = getFragmentManager();
frgmanager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
FragmentTransaction frgTransaction = frgmanager.beginTransaction();
if(subitem.equalsIgnoreCase("subitem")){
Frag1 frg1 =new Frag1(mCtx);
frgTransaction.replace(R.id.inflate_layout, frg1);
}else if(subitem1.equalsIgnoreCase("subitem1")){
Frag2 frg2 =new Frag2(mCtx);
frgTransaction.replace(R.id.inflate_layout, frg2);
}else{
Frag2 frg3 =new Frag3(mCtx);
frgTransaction.replace(R.id.inflate_layout, frg3);
}
frgTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
frgTransaction.commit();
您可以在FragmentStration object.like中使用addtobackstack
FragmentManager manager = getFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.bodyfragment, new AnotherFragment());
transaction.addtoBackStack(null).commit();
是的,我正在替换,正如我在上面的声明中清楚地说的那样。显示我可以跟踪它吗?它中的当前片段是什么?但是我如何跟踪不打开它在frgTransaction.setTransition(FragmentTransaction.TRANSIT\u fragment\u FADE)上给出错误的同一片段的多个实例;它说必须是其中之一,fragmentTransaction,open,close,none,当我将其切换为none或open或close时,错误在没有该行的情况下消失并检查,是片段调用还是notbackstack对我没有帮助
FragmentManager manager = getFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.bodyfragment, new AnotherFragment());
transaction.addtoBackStack(null).commit();