通过onBackPressed调用popBackStack和直接调用有什么区别?

问题描述 投票:0回答:0

首先,非常抱歉我的英语不是很好。我是通过翻译写的。如果有什么不清楚的地方,请原谅我。 问题是我有一个 Activity 和两个 Fragments,FragmentA 和 FragmentB

FragmentTransaction transaction = mFragmentManager.beginTransaction();
        transaction.setCustomAnimations(R.anim.custom_slide_in_left, R.anim.custom_slide_out_left,
                R.anim.custom_slide_in_right, R.anim.custom_slide_out_right);
        transaction.add(containerViewId, baseFragment, tag);
        transaction.addToBackStack("name");
        transaction.commitAllowingStateLoss();

首先这样添加FragmentA,然后通过FragmentA中的点击事件添加FragmentB

@Override
    public void onBackPressed() {
        mFragmentManager.popBackStack();
    }

重写Activity的onBackPressed方法执行popBackStack。此时FragmentB成功执行PopExitAnim,一切正常,但是直接执行PopBackStack时,此时FragmentB也退出了,但是动画没有执行,就这样

@Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        mFragmentManager.popBackStack();
    }

BackStack 的交易是完全一致的。我只观察到FragmentManager的mCurState在调用onBackPressed时是Fragment.RESUMED,而直接调用popBackStack时是Fragment.STARTED,但是无法理解为什么同样重写onBackPressed的方法调用同样的方法,结果却不一样。是什么原因导致popExitAnim不能正常执行,求助,谢谢

android android-fragments fragment-backstack
© www.soinside.com 2019 - 2024. All rights reserved.