另一种fragment切换方式

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();
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值