Android Fragment 在返回棧popBackStack() ,返回時onResume問題
阿新 • • 發佈:2019-01-05
我們在用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會重新走一次。