Java.lang.IllegalStateException: commit already called

这个问题的原因是我们持有了一个全局的FragmentTransaction 导致我们的commit只能被调用一次。


解决方法,可以将我们的FragmentTransaction变成我们对应的局部变量,这样我们就可以在每个局部调用commit而不会报错,可以愉快的进行Fragment的操作了。


解决后的代码如下


/**
 * 当前为 IChatRecordTypeListener接口的实现类
 *
 * @author 候帅
 *         Created by iyunwen on 2016/12/27.
 */

public class ChatRecordTypeListenerImpl implements IChatRecordTypeListener {


    private FragmentManager mSupportFragmentManager;

    public ChatRecordTypeListenerImpl(FragmentManager mSupportFragmentManager) {
        this.mSupportFragmentManager = mSupportFragmentManager;
    }

    @Override
    public void onSingleImage(RequestRobotResult robot_information) {

        FragmentTransaction fragmentTransaction = mSupportFragmentManager.beginTransaction();

        ChatSingleImageFragment chatSingleImageFragment = new ChatSingleImageFragment();
        Bundle bundle = new Bundle();
        bundle.putParcelable("info", robot_information);
        chatSingleImageFragment.setArguments(bundle);
        fragmentTransaction.replace(R.id.fl_chat_show, chatSingleImageFragment)
                .addToBackStack(null)
                // TODO: 2016/12/27 后退和进入的动画效果
//                .setCustomAnimations()
                .commit();

    }

    @Override
    public void onMoreImage(RequestRobotResult robot_information) {
        FragmentTransaction fragmentTransaction = mSupportFragmentManager.beginTransaction();

        ChatMoreImageFragment chatMoreImageFragment = new ChatMoreImageFragment();
        Bundle bundle = new Bundle();
        bundle.putParcelable("info", robot_information);
        chatMoreImageFragment.setArguments(bundle);
        fragmentTransaction.replace(R.id.fl_chat_show, chatMoreImageFragment)
                .addToBackStack(null)
                // TODO: 2016/12/27 后退和进入的动画效果
//                .setCustomAnimations()
                .commit();

    }

    @Override
    public void onMoreText(Question_RobotAnswer robot_information) {
        FragmentTransaction fragmentTransaction = mSupportFragmentManager.beginTransaction();

        ChatMoreTextFragment chatMoreTextFragment = new ChatMoreTextFragment();
        Bundle bundle = new Bundle();
        bundle.putParcelable("info", robot_information);
        chatMoreTextFragment.setArguments(bundle);
        fragmentTransaction.replace(R.id.fl_chat_show, chatMoreTextFragment)
                .addToBackStack(null)
                // TODO: 2016/12/27 后退和进入的动画效果
//                .setCustomAnimations()
                .commit();
    }

    @Override
    public void onSingleText(Question_RobotAnswer robot_information) {
        FragmentTransaction fragmentTransaction = mSupportFragmentManager.beginTransaction();

        ChatTextFragment chatTextFragment = new ChatTextFragment();
        Bundle bundle = new Bundle();
        bundle.putParcelable("info", robot_information);
        chatTextFragment.setArguments(bundle);
        fragmentTransaction.replace(R.id.fl_chat_show, chatTextFragment)
                .addToBackStack(null)
                // TODO: 2016/12/27 后退和进入的动画效果
//                .setCustomAnimations()
                .commit();
    }

    @Override
    public void onAudio(Question_RobotAnswer robot_information) {
        FragmentTransaction fragmentTransaction = mSupportFragmentManager.beginTransaction();

        ChatAudioFragment chatAudioFragment = new ChatAudioFragment();
        Bundle bundle = new Bundle();
        bundle.putParcelable("info", robot_information);
        chatAudioFragment.setArguments(bundle);
        fragmentTransaction.replace(R.id.fl_chat_show, chatAudioFragment)
                .addToBackStack(null)
                // TODO: 2016/12/27 后退和进入的动画效果
//                .setCustomAnimations()
                .commit();
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值