更多Android Fragment Backstack混乱

时间:2015-08-27 16:30:34

标签: android android-fragments fragmenttransaction

我已经阅读了很多有关此内容的SO帖子和Android文档,但无论出于何种原因,它都没有点击我 - 希望有人可以帮我直截了当。

我有一个单独的活动,我正在浏览一系列片段,但我没有得到我所期待的后台行为。我有以下例程,我打电话来推送片段:

public void pushFragment(Fragment fragment, String tag, boolean addToBackStack, boolean animate) {
        FragmentTransaction ft = getSupportFragmentManager().beginTransaction();

        if (animate)
            ft.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_left, R.anim.slide_in_right, R.anim.slide_out_right);
        else
            ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);

        ft.replace(R.id.main_content, fragment, tag);

        if (addToBackStack)
            ft.addToBackStack(tag);

        ft.commit();
}

片段A,B和C最终通过以下调用一个接一个地显示在容器中:

pushFragment(A, "A", true, false);
pushFragment(B, "B", true, true);   
pushFragment(C, "C", false, true);  // Don't add to backstack
pushFragment(B, "B", true, true);   // This happens after back clicked.

当显示C时点击后退按钮时,我按预期得到A,此时我希望C不应该在任何后台交易中。如果此时我再次向前移动到B,我看到A立即被C替换,然后转换到B - 再次回击确认现在显示C,而不是A.

基本上我期望(或者想要得到): A - > B - > C - >返回 - > A - > B - >返回 - > A等...... 但请看: A - > B - > C - >返回 - > A - > B - >返回 - > ç

道歉几乎可以肯定是一个重复的帖子,但是希望有人可以重新解释一下,它最终会向我注册。

谢谢!

1 个答案:

答案 0 :(得分:0)

根据Android开发人员指南     调用commit()不会立即执行事务。相反,一旦线程能够这样做,它就会将其安排在活动的UI线程(" main"线程)上运行。但是,如果需要,您可以从UI线程调用executePendingTransactions()以立即执行commit()提交的事务。除非事务是其他线程中作业的依赖项,否则通常不需要这样做。