通過一個list集合控制一個activity中所有的fragment顯示與隱藏

public void switchFragment(int targetIndex) {
        List<BaseFragment> list = getListFragment();
        if (list != null && list.size() > 0) {
            
            FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
            Fragment targetFragment = list.get(targetIndex);
            for (int i = 0; i < list.size(); i++) {
                if (i != targetIndex) {
                    Fragment currentFragment = list.get(i);
                    //如果fragment已經添加到事物中,則將fragment隱藏掉
                    if (currentFragment.isAdded()) {
                        transaction.hide(currentFragment);
                    }
                }
            }
            //判斷fragment是否已經添加到事務中
            if (targetFragment.isAdded()) {
                //如果該fragment已經添加到事務中,則從事務中取出顯示即可,無需銷燬再重新創建
                transaction.show(targetFragment);
            } else {
                //如果該fragment沒有添加到事務中,則添加新的事務
                transaction.add(fragmentLayoutId(), targetFragment);
            }
            transaction.commit();

        }
    }
 //可以通過重寫此方法傳進裝有fragment的集合
    protected List<BaseFragment> getListFragment() {
        return new ArrayList<>();
    }
//可以通過此方法傳進fragment佔位顯示的fragmentLayout的ID
    protected
    @IdRes
    int fragmentLayoutId() {
        return 0;
    }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章