美文网首页Fragments
通过hide、show方式加载Fragment

通过hide、show方式加载Fragment

作者: 楷桐 | 来源:发表于2018-04-10 19:59 被阅读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();
        }
    

    相关文章

      网友评论

        本文标题:通过hide、show方式加载Fragment

        本文链接:https://www.haomeiwen.com/subject/wmonhftx.html