Activity異常破棄後、fragmentが重複する問題
1669 ワード
1.原因分析:
Activityは長期にわたってバックグラウンドにあり,システムはリソース不足のためactivityが破棄され,fragment状態がキャッシュされた.再びactivityに入ったので、再び歩きました
onCreateメソッドにより、fragmentが再加入し、fragmentが重複する
2.解決方法:
(1).Tagで以前保存したデータから直接読み出します
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mFragmentManager = getSupportFragmentManager();
if (savedInstanceState != null) {
homeFragment =(HomeFragment)mFragmentManager.findFragmentByTag(fragmentTag[0]);
twoFragment = (TwoFragment) mFragmentManager.findFragmentByTag(fragmentTag[1]);
myFragment = (MyFragment) mFragmentManager.findFragmentByTag(fragmentTag[2]);
}
}
(2).新規fragmentの削除
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mFragmentManager = getSupportFragmentManager();
if (mFragmentManager.getFragments().size() > 0) {
FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction();
Iterator iterator = mFragmentManager.getFragments().iterator();
while (iterator.hasNext()) {
fragmentTransaction.remove(iterator.next());
}
fragmentTransaction.commit();
}
}
(3).fragment状態を保存しない(試したことがない)
@Override
protected void onSaveInstanceState(Bundle outState) {
//super.onSaveInstanceState(outState);
}