Fragments

通过hide、show方式加载Fragment

2018-04-10  本文已影响102人  楷桐

第一种:

    private Fragment preFragment;

    private FragmentTransaction switchFragment(Fragment targetFragment) {
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        if (!targetFragment.isAdded()) {
            transaction.add(R.id.fragment, targetFragment, targetFragment.getClass().getName());
            if (preFragment != null) {
                transaction.hide(preFragment);
            }
        } else {
            transaction.show(targetFragment)
                    .hide(preFragment);
        }
        preFragment = targetFragment;
        return transaction;
    }

先搞一个变量存着上一次 add 的 Fragment,

  1. 判断目标 Fragment 是否被添加到视图中;
  2. 如果已经添加过,直接显示目标Fragment,并隐藏之前的Fragment;
  3. 如果没被添加过,则添加进视图中;
  4. 考虑到第一次调用该方法的时候,preFragment为null,所以要做判空。

第二种:

    /**
     * 切换显示Fragment
     */
    public void switchFragment(Fragment fragment){
        // 开启事物
        FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction();

        // 1.先隐藏当前所有的Fragment
        List<Fragment> childFragments = mFragmentManager.getFragments();
        for (Fragment childFragment : childFragments) {
            fragmentTransaction.hide(childFragment);
        }

        // 2.如果容器里面没有我们就添加,否则显示
        if(!childFragments.contains(fragment)){
            fragmentTransaction.add(mContainerViewId,fragment);
        }else{
            fragmentTransaction.show(fragment);
        }

        // 替换Fragment
        // fragmentTransaction.replace(R.id.main_tab_fl,mHomeFragment);
        // 一定要commit
        fragmentTransaction.commit();
    }
上一篇下一篇

猜你喜欢

热点阅读