另一种fragment切换方式

    xiaoxiao2021-03-29  34

    1:初始化视图,默认开启第一个fragment

    private void initView() { transaction = getSupportFragmentManager().beginTransaction(); Fragment fragment = getInstanceByIndex(FIRST_FRAGMENT_TRANSACTION); transaction.add(R.id.fl_fragment, fragment); transaction.commit(); }

    2:onclick事件进行fragment切换

    @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_firstFragment: switchContent(getInstanceByIndex(FIRST_FRAGMENT_TRANSACTION)); break; case R.id.btn_secondFragment: switchContent(getInstanceByIndex(SECOND_FRAGMENT_TRANSACTION)); break; default: break; } }

    主要看下switchContent的切换方式

    public void switchContent(Fragment to) { transaction= getSupportFragmentManager() .beginTransaction(); if (!to.isAdded()) { // 先判断是否被add过 transaction.hide(getVisibleFragment()).add(R.id.fl_fragment, to); // 隐藏当前的fragment,add下一个到Activity中 } else { transaction.hide(getVisibleFragment()).show(to); // 隐藏当前的fragment,显示下一个 } // transaction.addToBackStack(to.getClass().getSimpleName()); transaction.commit(); } public Fragment getVisibleFragment() { FragmentManager fragmentManager = getSupportFragmentManager(); List<Fragment> fragments = fragmentManager.getFragments(); for (Fragment fragment : fragments) { if (fragment != null && fragment.isVisible()) return fragment; } return new Fragment(); }

    并附上getInstanceByIndex方法实现

    private Fragment getInstanceByIndex(int stringExtra) { if (stringExtra == FIRST_FRAGMENT_TRANSACTION) { if (firstFragment == null) { firstFragment = new FirstFragment(); } return firstFragment; } if (stringExtra == SECOND_FRAGMENT_TRANSACTION) { if (secondFragment == null) { secondFragment = new SecondFragment(); } return secondFragment; } return new Fragment(); }

    进堆栈

    transaction.addToBackStack(to.getClass().getSimpleName());

    弹出堆栈

    public void popBackStack() { getSupportFragmentManager().popBackStack(); }
    转载请注明原文地址: https://ju.6miu.com/read-664836.html

    最新回复(0)