您可以使用下面的代码将碎片添加到背堆栈。
fragmentTransaction.add(id, fragment, Tag(I usually do fragment.getclass().getName())).addToBackStack(backstackName(I usually do fragment.getclass().getName()))
当您添加第二个片段使用下面repleaceFragentMethod。
private void replaceFragment(android.support.v4.app.Fragment fragment) {
String backStateName = fragment.getClass().getName();
String fragmentTag = backStateName;
FragmentManager manager = getSupportFragmentManager();
manager.executePendingTransactions();
boolean fragmentPopped = manager.popBackStackImmediate(backStateName, 0);
if (!fragmentPopped && manager.findFragmentByTag(fragmentTag) == null) { //fragment not in back stack, create it.
FragmentTransaction ft = manager.beginTransaction();
ft.replace(R.id.frament_container, fragment, fragmentTag);
ft.addToBackStack(backStateName);
ft.commit();
}
}
查找内存泄漏使用LeakCanary(https://github.com/square/leakcanary)
谢谢你的答案。金丝雀lib不工作如预期: https://github.com/square/leakcanary/issues/660 我试图像你发布,但没有manager.executePendingTransactions(); 我尝试像你说的,并在这里写结果。 –
另外我发现我的问题,由Eclipse MAT,所以,系统不希望最终确定我的碎片中的某个对象。我不明白为什么。那么,我们必须只使用内部的ft.addToBackStack和片段堆栈? –
如果您想再次使用该片段,最好将其添加到backstack并检索相同的片段,而不是再次添加相同的片段。 – Avinash4551