Fragment回退栈和Activity栈不太一样

Fragment回退栈,加入到Fragment回退栈里面的fragment出栈后,处于栈顶的fragment也不会执行onResume生命周期。(即已经加入到Fragment回退栈里面的Fragment不会再执行Fragment的任何一个生命周期方法)这点和activity栈不一样。
如果想要Fragment回退栈里面的生命周期方法执行,只能通过曲线救国的方式:在fragment的容器Activity中添加回退监听,通过tag拿到回退栈中想要的fragment实例,然后通过该实例强制调用fragment的生命周期方法。

        getSupportFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() {
            @Override
            public void onBackStackChanged() {
                FragmentManager fm = getSupportFragmentManager();
                if (fm != null) {
                    HouseContrastListFragment fragment = (HouseContrastListFragment) fm.findFragmentByTag(HouseContrastListFragment.TAG);
                    if (fragment != null) {
                        fragment.onResume();
                    }

                    HouseDetailFragment houseDetailFragment
                            = (HouseDetailFragment) fm.findFragmentByTag(HouseDetailFragment.TAG);
                    if (houseDetailFragment != null) {
                        houseDetailFragment.onResume();
                    }
                }
            }
        });

你可能感兴趣的:(Fragment回退栈和Activity栈不太一样)