1. 程式人生 > >28.如何避免fragment重複載入

28.如何避免fragment重複載入

不使用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;
}