首页 > 解决方案 > 片段替换再次引起问题

问题描述

我的活动 XML

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


    <FrameLayout
        android:id="@+id/contentFrame1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></FrameLayout>

</android.support.design.widget.CoordinatorLayout>

我有一个从活动的 onCreate 调用的 attachView 方法

@Override
protected void attachView() {
    // Get the fragment from dagger
    getFragmentManager().
            beginTransaction().
            setCustomAnimations(R.animator.slide_up, 0, 0, R.animator.slide_down).
            replace(R.id.contentFrame1, new MatchFragment2()).
            addToBackStack("MatchFragment").
            commit();
    getFragmentManager().executePendingTransactions();

    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            getFragmentManager().
                    beginTransaction().
                    setCustomAnimations(R.animator.slide_up, 0, 0, R.animator.slide_down).
                    replace(R.id.contentFrame1, new VictorFragment()).
                    addToBackStack("VictorFragment").
                    commit();
            getFragmentManager().executePendingTransactions();
            getFragmentManager().getBackStackEntryCount(); //this reads 2
        }
    }, 3000);
}

当我从 VictorFragment 返回时,我看到了 MatchFragment。VictorFragment 不应该是场景中唯一存在的片段并且从它按下应该退出活动吗?

标签: androidandroid-fragments

解决方案


删除您对该addToBackStack()方法的调用。

当您在 aFragmentTransaction上调​​用它时,您是在告诉系统您希望它“记住”交易并允许您通过按后退按钮“撤消”它。因此,如果您希望后退按钮取消VictorFragment并重新显示MatchFragment2,那么您不应该调用addToBackStack()事务。


推荐阅读