28.如何避免fragment重複載入
阿新 • • 發佈:2019-02-09
不使用replace方法
1.點選模組時首先hide所有fragment:
/**
* 隱藏所有fragment
*/
private void hideAllFragment() {
if (mTrainFragment != null) {
mTransaction.hide(mTrainFragment);
}
if (mFindFragment != null) {
mTransaction.hide(mFindFragment);
}
}
2.然後判斷是否為空來add或者show:
@Override
public void onClick(View v) {
mTransaction = mManager.beginTransaction ();
hideAllFragment(); //隱藏所有fragment
switch (v.getId()) {
case R.id.train:
selectTab(mTrainIv, mTrainTv);//模組按鈕的圖片和文字變化
if (mTrainFragment == null) {
mTrainFragment = TrainFragment.getInstance();
mTransaction.add(R.id.fragment_layout, mTrainFragment);
} else {
mTransaction.show(mTrainFragment);
}
break;
case R.id.find:
selectTab(mFindIv, mFindTv);
if (mFindFragment == null) {
mFindFragment = FindFragment.getInstance();
mTransaction.add (R.id.fragment_layout, mFindFragment);
} else {
mTransaction.show(mFindFragment);
}
break;
}
mTransaction.commit();
}
3.fragment使用單例:
private static FindFragment fragment = null;
public static FindFragment getInstance() {
if (fragment == null) {
fragment = new FindFragment();
}
return fragment;
}
4.在fragment的onCreateView方法中判斷view是否為空:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if (view == null){
view = inflater.inflate(R.layout.fragment_find, container, false);
initView();
}
return view;
}