Fragment commit already called的错误

本文介绍在Android应用中如何正确地使用Fragment事务进行动态切换。通过使用局部变量而非全局变量来进行commit操作,可以避免出现commitalreadycalled错误。文中提供了具体的代码示例来说明这一实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在使用fragment时,当需要使用事务transaction来动态切换时,每一个commit都需要使用局部临时变量,不能使用全局变量,否则会报告commit already called的错误。例如:

 if (fragment.getTag().equals(TAG_FRAGMENT_ONE)) {
 //每次使用时都使用局部变量FragmentManager 和FragmentTransaction 来commit
        FragmentManager fm = getSupportFragmentManager();
        FragmentTransaction ft = fm.beginTransaction();
        ft.replace(R.id.activity_fragment_demo, new FragmentTwo(), TAG_FRAGMENT_TWO);
        ft.addToBackStack(null);
        ft.commit();
    } else {
        if (fragment.getTag().equals(TAG_FRAGMENT_TWO)) {
        //每次使用时都使用局部变量FragmentManager 和FragmentTransaction 来commit
            FragmentManager fm = getSupportFragmentManager();
            FragmentTransaction ft = fm.beginTransaction();
            ft.hide(fragment);
            ft.add(R.id.activity_fragment_demo, new FragmentThree(), TAG_FRAGMENT_THREE);
            ft.addToBackStack(null);
            ft.commit();
        } else {
            if (fragment.getTag().equals(TAG_FRAGMENT_THREE)) {
                LoginDialogFragment dialog = new LoginDialogFragment();
                dialog.show(getSupportFragmentManager(), "login");
            } else {

            }
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值