1. 程式人生 > >Android Fragment 在返回棧popBackStack() ,返回時onResume問題

Android Fragment 在返回棧popBackStack() ,返回時onResume問題

我們在用Fragment的時候,有時會將fragment加入到返回棧中

mgrFragment.beginTransaction().add(R.id.fl_home, frgNearby).addToBackStack(null).commitAllowingStateLoss();

但當我們需要在fragment的onResume中處理一些事情時,才會發現,這時返回到原先的fragment是不走onResume 方法的。是因為popBackStack()是對已經存在棧中的fragment進行狀態恢復。

那麼,我們想要在我們的fragment狀態恢復時重新整理我們下面的Fragment的onResume中的資料時,該怎麼處理呢

其實我們可以在activity中在對我們需要的fragment進行返回監聽就可以。 使用FragmentManager 的OnBackStackChangedListener就可以,詳情請看程式碼

FragmentManager mgrFragment = getSupportFragmentManager();
 mgrFragment.addOnBackStackChangedListener(getListener());
        mgrFragment.beginTransaction().add(R.id.fl_home, frgNearby).addToBackStack
(null).commitAllowingStateLoss(); ---------- private FragmentManager.OnBackStackChangedListener getListener() { FragmentManager.OnBackStackChangedListener result = new FragmentManager.OnBackStackChangedListener() { public void onBackStackChanged() { FragmentManager manager = getSupportFragmentManager();
if (manager != null) { Fragment currFrag = (Fragment) manager.findFragmentById(R.id.fl_home); currFrag.onResume(); } } }; return result; }

就這樣,我們在返回時,就會發現我們fragment onResume會重新走一次。