popbackstack后片段不可见

时间:2017-02-27 11:13:54

标签: android android-fragments fragmentmanager fragment-backstack

我在{% import _self as renderJobMacro %} {% macro renderJob(fields) %} // renders the job UI block, but I've removed it for simplicity Hello world. {% endmacro %} {% block _jobs_widget %} <div id="jobsContainer"> {% for fields in form.children %} {{ renderJobMacro.renderJob(fields) }} {% endfor %} </div> {% endblock %} 中添加片段(主片段),而不是将其添加到backstack,我使用Activity.onCreate()来实现。之后,我使用FragmentTransaction.replace()添加每个下一个片段并将其添加到backstack。

我有一个功能可以清除后台堆栈,让主页片段可见,为此我使用FragmentTransaction.replace()

如果我只添加一个片段到backstack然后清除backstack它工作正常,但是如果我添加多个,那么在清除了backstack之后屏幕是空白的,尽管home片段接收onStart()和onResume()并且认为它是可见的,它不会接收onPause(),onStop(),直到我再次添加另一个片段或离开应用程序。 此外,如果我FragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);一个接一个(在用户操作上)它工作正常,但如果我在循环中popBackstack()(一次弹出所有片段)它就不起作用。

以下是代码:

popBackstack()

2 个答案:

答案 0 :(得分:4)

FragmentTransaction有一个新方法(在版本25.1.0中添加),请参阅:https://developer.android.com/reference/android/support/v4/app/FragmentTransaction.html#setAllowOptimization(boolean)

尝试在FragmentTransaction上进行设置:

final FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();    
transaction.setAllowOptimization(true);
transaction.replace(...);

这解决了我的问题。

致记:https://stackoverflow.com/a/42597413/5310016

答案 1 :(得分:2)

原来新的支持库版本搞砸了。更改后

compile 'com.android.support:appcompat-v7:25.1.1'

回到

compile 'com.android.support:appcompat-v7:25.0.1'

一切正常