您的位置:首页 > 编程语言 > Java开发

Java.lang.IllegalStateException: commit already called

2016-12-28 10:08 351 查看
这个问题的原因是我们持有了一个全局的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();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: