美文网首页
玩安卓---Fragment

玩安卓---Fragment

作者: 努力生活的西鱼 | 来源:发表于2019-05-23 22:02 被阅读0次
    public class MainActivity extends WanAndroidBaseActivity {
    
        @BindView(R.id.navigationView)
        BottomNavigationView bottomNavigationView;
        private List<Fragment> fragmentList;
        private FragmentTransaction transaction;
        private int lastFragment;
    
        @Override
        protected int getLayoutId() {
            return R.layout.activity_main;
        }
    
        @Override
        protected void initView() {
            initFragment();
            lastFragment = 0;
    
            // replace(int,fragment): 替换一个已被添加进视图容器的Fragment,缺点是每次都会重新初始化加载
            transaction.replace(R.id.mainContainer, fragmentList.get(lastFragment));
            // show(fragment): 显示一个存在fragment
            // hide(fragment): 隐藏一个存在的fragment
            transaction.show(fragmentList.get(lastFragment));
            // 提交事务
            transaction.commit();
    
            bottomNavigationView.setOnNavigationItemSelectedListener(menuItem -> {
                switch (menuItem.getItemId()) {
                    case R.id.menu_home:
                        if (lastFragment != 0) {
                            switchFragment(lastFragment, 0);
                            lastFragment = 0;
                        }
                        break;
                    case R.id.menu_knowledge_hierarchy:
                        if (lastFragment != 1) {
                            switchFragment(lastFragment, 1);
                            lastFragment = 1;
                        }
                        break;
                    case R.id.menu_wechat_sub:
                        if (lastFragment != 2) {
                            switchFragment(lastFragment, 2);
                            lastFragment = 2;
                        }
                        break;
                    case R.id.menu_project:
                        if (lastFragment != 3) {
                            switchFragment(lastFragment, 3);
                            lastFragment = 3;
                        }
                        break;
                    case R.id.menu_me:
                        if (lastFragment != 4) {
                            switchFragment(lastFragment, 4);
                            lastFragment = 4;
                        }
                        break;
                    default:
                        return true;
                }
                return true;
            });
        }
    
        private void initFragment() {
            fragmentList = new ArrayList<>();
            fragmentList.add(new HomeFragment());
            fragmentList.add(new HomeFragment());
            fragmentList.add(new HomeFragment());
            fragmentList.add(new HomeFragment());
            fragmentList.add(new HomeFragment());
            transaction = getSupportFragmentManager().beginTransaction();
        }
    
        /**
         * 切换Fragment
         *
         * @param lastFragment
         * @param currentIndex
         */
        private void switchFragment(int lastFragment, int currentIndex) {
            // hide(fragment): 隐藏fragment
            transaction.hide(fragmentList.get(lastFragment));
            if (!fragmentList.get(currentIndex).isAdded()) {
                // add(): 像Activity state中添加一个Fragment
                // remove(): 像Activity state中移除一个Fragment
                transaction.add(R.id.mainContainer, fragmentList.get(currentIndex));
            }
            transaction.show(fragmentList.get(currentIndex));
            // commitAllowingStateLoss: 和commit一样,但是允许Activity的状态保存之后提交
            transaction.commitAllowingStateLoss();
        }
    
    
    }
    

    注意Fragment中的几个方法的使用

    相关文章

      网友评论

          本文标题:玩安卓---Fragment

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