这个问题的原因是我们持有了一个全局的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();
}
}