Android FrameLayout 嵌套 Fragment 时切换Fragment,出现Fragment中ViewPager的滑动卡顿

实现的效果图:

遇到的问题,之前往FrameLayout中添加Fragment是通过replace去添加的

getSupportFragmentManager().beginTransaction().addToBackStack(null).replace(R.id.framelayout, fragment).commit();

但是出现了Fragment一切换就重新创建的问题,后来采用了add去添加的方式,让Fragment只添加一次,首先对Fragment进行隐藏,然后再去添加Fragment,添加过后再次切换时去判断Fragment是否已经存在了,存在就去显示,不存在则创建。

上代码一看便知

public class MainActivity extends BaseActivity {

    private static final String TAG = "MainActivity";
    private BottomNavigationBar mBottomNavigationBar;
    private FrameLayout framelayout;
    private int lastSelectedPosition = 0;
    private WarningMonitoringFragment warningInquireFragment;
    private DataInquireFragment dataInquireFragment;
    private PersonalSettingFragment personalSettingFragment;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        initData();

    }


    private void initView() {
        framelayout = findViewById(R.id.framelayout);
        mBottomNavigationBar = findViewById(R.id.bottom_navigation);
        setBottomNavigationBar();

    }

    private void initData() {

    }

    /**
     * 设置BottomNavigationBar属性
     */
    private void setBottomNavigationBar() {
        // TODO 设置模式
        mBottomNavigationBar.setMode(BottomNavigationBar.MODE_FIXED);
        // TODO 设置背景色样式
        mBottomNavigationBar.setBackgroundStyle(BottomNavigationBar.BACKGROUND_STYLE_STATIC);
        mBottomNavigationBar.setBarBackgroundColor(R.color.bottombarback);

        mBottomNavigationBar
                .addItem(new BottomNavigationItem(R.mipmap.yujingjiankong_img_unselect, "预警监控").setActiveColorResource(R.color.selecttextcolor).setInactiveIconResource(R.mipmap.yujingjiankong_img_select).setInActiveColorResource(R.color.unselecttextcolor))
                .addItem(new BottomNavigationItem(R.mipmap.shujuchaxun_img_unselect, "资讯").setActiveColorResource(R.color.selecttextcolor).setInactiveIconResource(R.mipmap.shujuchaxun_img_select).setInActiveColorResource(R.color.unselecttextcolor))
                .addItem(new BottomNavigationItem(R.mipmap.gerenshezhi_img_unselect, "我的").setActiveColorResource(R.color.selecttextcolor).setInactiveIconResource(R.mipmap.gerenshezhi_img_select).setInActiveColorResource(R.color.unselecttextcolor))
                .setFirstSelectedPosition(lastSelectedPosition)
                .initialise();

        /**
         * 从这里开始
         */ 


        //实例化默认显示的WarningMonitoringFragment
        warningInquireFragment = new WarningMonitoringFragment();
        addFragment(warningInquireFragment);

        mBottomNavigationBar.setTabSelectedListener(new BottomNavigationBar.OnTabSelectedListener() {
            @Override
            public void onTabSelected(int position) {
                lastSelectedPosition = position;
                hideFragment();
                switch (position) {
                    case 0:

                        if (warningInquireFragment!=null){
                            showFragment(warningInquireFragment);
                        }
                        break;
                    case 1:
                        //Fragment没添加过就去添加,添加过了,就直接显示
                        if (dataInquireFragment == null) {
                            //实例化DataInquireFragment
                            dataInquireFragment = new DataInquireFragment();
                            addFragment(dataInquireFragment);
                        } else {

                            showFragment(dataInquireFragment);
                        }


                        break;
                    case 2:
                        if (personalSettingFragment == null) {
                            //实例化PersonalSettingFragment
                            personalSettingFragment = new PersonalSettingFragment();
                            addFragment(personalSettingFragment);
                        } else {

                            showFragment(personalSettingFragment);
                        }

                        break;
                }
            }

            @Override
            public void onTabUnselected(int position) {

            }

            @Override
            public void onTabReselected(int position) {

            }
        });
    }


    /**
     * 添加Fragment
     */
    private void addFragment(Fragment fragment) {
        getSupportFragmentManager().beginTransaction().addToBackStack(null).add(R.id.framelayout, fragment).commit();
    }

    /**
     * 显示Fragment
     */
    private void showFragment(Fragment fragment) {
        getSupportFragmentManager().beginTransaction().addToBackStack(null).show(fragment).commit();
    }

    /**
     * 隐藏Fragment
     */
    private void hideFragment() {
        //再重新获取一个开启事务
        FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
        //不等于空或者是否添加的时候
        if (warningInquireFragment != null && warningInquireFragment.isVisible()) {
            fragmentTransaction.hide(warningInquireFragment);
        }
        if (dataInquireFragment != null && dataInquireFragment.isVisible()) {
            fragmentTransaction.hide(dataInquireFragment);
        }
        if (personalSettingFragment != null && personalSettingFragment.isVisible()) {
            fragmentTransaction.hide(personalSettingFragment);
        }

        fragmentTransaction.commit();
    }


}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

窗台的花花

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值