Android中Fragment的使用总结示例

private void init() {
        fragmentManager = getSupportFragmentManager();
        fragmentA = new FragmentA();
        fragmentB = new FragmentB();
        fragmentC = new FragmentC();
        // TODO: 有两种方式 1,依次add,控制hide和show,不会重新创建一个fragment
        // TODO: 2, 每次replace,调用一次会重新创建一个fragment
        // 开启事务 并提交(每次均返回一个事物对象)
        fragmentManager.beginTransaction()
                .add(R.id.activity_layout, fragmentA)
                .commit();
        //(系统自带的 不好用,每一个互相叠加)把 事物添加到 回退栈
        //transaction.addToBackStack("A");
        addToBackStack(fragmentA);
    }

    public void click(View v) {
        FragmentTransaction transaction = fragmentManager.beginTransaction();
        switch (v.getId()) {
            case R.id.second_btn1:
                if (fragmentA.isVisible()) {
                    return;
                } else {
                    if (!fragmentA.isAdded()) {
                        transaction.add(R.id.activity_layout, fragmentA);
                    }
                    transaction.show(fragmentA).hide(fragmentB).hide(fragmentC);
                }
                //(系统自带的 不好用)把 事物添加到 回退栈
                //transaction.addToBackStack("A");
                addToBackStack(fragmentA);
                break;
            case R.id.second_btn2:
                if (fragmentB.isVisible()) {
                    return;
                } else {
                    if (!fragmentB.isAdded()) {
                        transaction.add(R.id.activity_layout, fragmentB);
                    }
                    transaction.show(fragmentB).hide(fragmentA).hide(fragmentC);
                }
                //(系统自带的 不好用)把 事物添加到 回退栈
//                transaction.addToBackStack("B");
                addToBackStack(fragmentB);
                break;
            case R.id.second_btn3:
                if (fragmentC.isVisible()) {
                    return;
                } else {
                    if (!fragmentC.isAdded()) {
                        transaction.add(R.id.activity_layout, fragmentC);
                    }
                    transaction.show(fragmentC).hide(fragmentA).hide(fragmentB);
                }
                //(系统自带的 不好用)把 事物添加到 回退栈
//                transaction.addToBackStack("B");
                addToBackStack(fragmentC);
                break;
        }
        transaction.commit();
    }

    @Override
    public void onBackPressed() {
        //super.onBackPressed();
        if (listFragment.size() > 1) {
            int size = listFragment.size();
            //移除最后一个,显示倒数第2个 fragment
            FragmentTransaction transaction = fragmentManager.beginTransaction();
            transaction.remove(listFragment.get(size - 1))
                    .show(listFragment.get(size - 2));
            transaction.commit();
            //移除最后一个 list元素
            listFragment.remove(size - 1);
        } else {
            finish();
        }
    }

    private ArrayList<Fragment> listFragment = new ArrayList<>();

    private void addToBackStack(Fragment fragment) {
        if (listFragment.contains(fragment)) {
            //把当前 fragment放在 list集合末尾
            listFragment.remove(fragment);
            listFragment.add(fragment);
        } else {
            listFragment.add(fragment);
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值