通过一个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;
    }

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