Ful*_*dom 5 android android-fragments fragmentmanager fragment-backstack
我在 中添加片段(主片段)Activity.onCreate(),而不将其添加到后台堆栈,我使用FragmentTransaction.replace(). 之后我使用添加每个下一个片段FragmentTransaction.replace()并将其添加到后台堆栈。
我有一个功能可以清除后退堆栈,使主页片段可见,为此我使用FragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);.
如果我只向后台堆栈添加 1 个片段,然后清除后台堆栈,则效果很好,但如果我添加多个片段,则在清除后台堆栈后,屏幕为空白,尽管主片段接收到 onStart() 和 onResume() 并认为它是可见的,它不会收到 onPause()、onStop(),直到我再次添加另一个片段或离开应用程序。另外,如果我popBackstack()一一地(在用户操作上)它工作正常,但如果我popBackstack()在循环中(一次弹出所有片段)它就不起作用。
这是代码:
public void changeFragment(BaseFragment fragment, boolean addToBackStack, boolean preventDuplicate) {
Fragment topFragment = getSupportFragmentManager().findFragmentById(fragmentContainer.getId());
if (preventDuplicate && topFragment != null && fragment.getClass().equals(topFragment.getClass())) {
//Prevent adding same fragment
return;
}
FragmentTransaction transaction =
fragmentManager
.beginTransaction()
.replace(fragmentContainer.getId(), fragment);
if (addToBackStack) {
transaction.addToBackStack(null);
}
transaction.commit();
}
public void goToHome() {
fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
Run Code Online (Sandbox Code Playgroud)
事实证明,新的支持库版本把事情搞砸了。改变后
compile 'com.android.support:appcompat-v7:25.1.1'
Run Code Online (Sandbox Code Playgroud)
回到
compile 'com.android.support:appcompat-v7:25.0.1'
Run Code Online (Sandbox Code Playgroud)
一切正常
| 归档时间: |
|
| 查看次数: |
2126 次 |
| 最近记录: |