我有四个片段F1,F2,F3,F4。 我正在使用replace方法替换已添加到容器中的现有片段。 其中一些使用addToBackStack(null)添加到backstack中,而另一些使用addToBackStack(tag)添加到backstack中。 现在使用以下方法检查片段是否已经添加或存在于事务中
public static boolean isFragmentInBackstack(final FragmentManager fragmentManager, final String fragmentTagName) {
for (int entry = 0; entry < fragmentManager.getBackStackEntryCount(); entry++) {
if (fragmentTagName.equals(fragmentManager.getBackStackEntryAt(entry).getName())) {
return true;
}
}
return false;
}
使用以下方法替换片段:
public void setFragmentToContainer(Fragment fragment) {
final String tag = fragment.getClass().getName();
if (manager == null) {
manager = getSupportFragmentManager();
}
transaction = manager.beginTransaction();
if (isFragmentInBackstack(manager, tag)) {
// Fragment exists, go back to that fragment
//// you can also use POP_BACK_STACK_INCLUSIVE flag, depending on flow
manager.popBackStackImmediate(tag,0);
transaction.remove(fragment);
} else {
// Fragment doesn't exist
}
transaction.replace(R.id.layout_content, fragment);
if (fragment instanceof CompanyLevelFragment) {
//Exit app on back press
} else {
if (fragment instanceof F1) {
transaction.addToBackStack(null);
} else {
transaction.addToBackStack(tag);
}
}
transaction.commit();
}
问题:
假设第一次将片段F2添加到事务中,然后更改应用程序中的日期以获取特定日期的更新数据。在获取更新数据后,我调用 setFragmentToContainer(),它将检查后退堆栈中片段的条目,isFragmentInBackstack() 将检查片段是否已经在后退堆栈中,然后调用popBackStackImmediate来删除这些条目。
现在我需要按两次返回按钮才能关闭片段F2。如何从管理器中删除相同片段的早期空白条目?另一个例子是假设我添加F3四次,则必须按四次返回按钮。
请告诉我如何在添加到后退堆栈之前删除相同片段的旧条目?