我使用的是导航抽屉,使用起来很简单。我没有提供完整的代码,但为您提供了易于理解我的问题的详细信息。我正在使用片段,这些片段大约有8个,我用另一个替换它们。但是这里出现了一个问题 我正在导航抽屉的点击事件中替换它们。但有两个主要问题
更换后,我可以在后台看到上一个片段。替换方法只是调用新的片段吗?如果是,那么我应该怎么做旧片段在我的新片段的背景中不可见。
当我点击导航抽屉Item时,它会成功加载特定片段。但是当我再次点击该特定项目时,保留在该片段中,它会一次又一次地加载此片段。例如,如果抽屉项目编号3打开片段MyBook,那么通过单击项目num 3 2或多次将打开片段那么多时间。
所以请有人回答我如何治愈我的应用程序,我已经在上面描述了这种行为。
答案 0 :(得分:1)
我试过这样的。它的工作正常我
1
答案 1 :(得分:1)
你可以在fragmentstranstion object.like
中使用addtobackstackFragmentManager manager = getFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.bodyfragment, new AnotherFragment());
transaction.addtoBackStack(null).commit();
答案 2 :(得分:0)
使用替换 - FragmentTransaction的方法而非添加(http://developer.android.com/guide/components/fragments.html#Transactions)
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:
}
}
为了避免重新实例化片段,跟踪当前打开的片段并仅执行片段事务,如果我们的下一个要打开的片段与当前片段不同。 这可能会像下面这样实现:
{{1}}
请注意,这只会比较基于类名的片段。有时这可能不是唯一的,例如如果有一个DetailFragment类显示有关实体的信息。要显示哪些实体细节可能取决于意图参数。
然而,如果显示Entity = 2的当前详细信息,则上述代码将阻止打开Entity = 1的DetailFragment。对于这些场景,需要扩展有关片段的信息(例如,将参考或WeakReference存储到片段实例本身)。