我在{% 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()
答案 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(...);
这解决了我的问题。
答案 1 :(得分:2)
原来新的支持库版本搞砸了。更改后
compile 'com.android.support:appcompat-v7:25.1.1'
回到
compile 'com.android.support:appcompat-v7:25.0.1'
一切正常