【发布时间】:2015-07-13 17:16:13
【问题描述】:
我有一个带有 ListView Navigation Drawer 的 Android 应用程序,它能够打开几个不同的片段。我遇到了一个问题,我允许用户单击以打开片段,即使它是当前显示的片段。 (这个功能是必须的)
如果单击列表项,这是我打开片段 B 的逻辑:
FragmentB fragmentB = FragmentB.newInstance();
transaction = ((AppCompatActivity) context).getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.container, fragmentB);
if (lastClicked == Constants.FRAGMENT_B) {
((AppCompatActivity) context).getSupportFragmentManager().popBackStack();
}
transaction.addToBackStack("FragmentB");
try {
transaction.commit();
} catch (IllegalStateException e) {}
lastClicked = Constants.FRAGMENT_B;
在我单击打开当前打开的片段之前,此代码工作正常。请注意弹出回栈的代码,以便完成当前片段并打开相同类型的新片段。
所以这就是问题所在: 假设我单击片段 A,然后单击片段 B,然后再次单击片段 B。在弹出回栈以移除旧片段 b 并添加新片段 b 之间,片段 A 的 onCreateView 和 onResume 都运行。如何避免在创建片段 B 的新实例时加载片段 A?
谢谢!
---编辑--- 下面贴出解决方案。这似乎有效。
【问题讨论】: