我正在尝试以非常简单的方式管理片段。我创建了一个实用程序类,它将片段添加到backstack中,当我们按下后退按钮时,前面的片段显示出来。我很好。但是,当我试图清除所有碎片并显示根碎片时,我无法正确地执行此操作。以下是我的实用程序类:
def is_transitive(relation):
for a,b in relation:
for c,d in relation:
if b == c and ((a,d) not in relation):
# print (a,b),(c,d) # uncomment for tests...
return False
return True
当我想要另一个片段时,我只是通过" true"对于animatedReplace方法中的addToStack。当我想要清除后挡板时,我会通过" false"并调用clearBackStackToHome方法。任何人都能帮我解决我做错的事吗?
答案 0 :(得分:0)
制作检查backStack为空的条件。当从backStack中删除所有片段然后显示您的根片段
答案 1 :(得分:0)
试试这个:
在您的Utility类中:
public void clearBackStack() {
FragmentManager manager = activity.getSupportFragmentManager();
if (manager.getBackStackEntryCount() > 0) {
FragmentManager.BackStackEntry first = manager
.getBackStackEntryAt(0);
manager.popBackStack(first.getId(),
FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
}
确保您的根/第一个片段animatedReplace()
传递boolean addToBackStack = false
。
这样它就不会被清除。
修改强>
要在您的活动OnBackPressed()
覆盖onBackPressed()
中使用它,并添加以下代码:
@Override
public void onBackPressed() {
FragmentManager fm = getSupportFragmentManager();
if (fm.getBackStackEntryCount() > 0) {
FragmentManager.BackStackEntry first = fm
.getBackStackEntryAt(0);
fm.popBackStack(first.getId(),
FragmentManager.POP_BACK_STACK_INCLUSIVE);
Log.i("MainActivity", "popping backstack");
} else {
super.onBackPressed();
}
}
答案 2 :(得分:0)
是的,您可以在MainActivity的 onBackPressed()方法中管理片段。 只需覆盖 onBackPressed(),并检查backStack计数,如果计数为零,则导航到根片段或退出app。此外,您可以根据检查后端堆栈中的哪个片段来实现您的代码。
@Override
public void onBackPressed() {
FragmentManager fm = getSupportFragmentManager();
int count = fm.getBackStackEntryCount();
if (count >= 1) {
if (fm.findFragmentById(R.id.main_container) instanceof yourFragment) {
super.onBackPressed();
}
} else {
// Show your root fragment here
}
}