Android FragmentTransaction commit already called解决方案

版权声明:本文为DmrfCoder原创作品,如有转载请注明出处 https://blog.csdn.net/qq_36982160/article/details/82422101

原因

这种情况一般是因为你在全局范围实例化了一个FragmentTransaction,然后多次使用同一个实例进行fragment跳转

解决方案

将:


    private FragmentManager fragmentManager;
    private FragmentTransaction fragmentTransaction;
     @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        fragmentManager = getSupportFragmentManager();
        fragmentTransaction = fragmentManager.beginTransaction();

        .....
    }


    @Override
    public void startfragment(Fragment targetFragment, boolean addToBackStack) {

        fragmentTransaction.replace(R.id.id_fragment_layout, targetFragment, targetFragment.getClass().getName());
        if (addToBackStack) {
            fragmentTransaction.addToBackStack(null);
        } else {
            mainPresenter.initActivityData();
        }
        fragmentTransaction.commitAllowingStateLoss();
    }

改为:

  private FragmentManager fragmentManager;
  private FragmentTransaction fragmentTransaction;


    @Override
    public void startfragment(Fragment targetFragment, boolean addToBackStack) {
         fragmentManager = getSupportFragmentManager();
        fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.replace(R.id.id_fragment_layout, targetFragment, targetFragment.getClass().getName());
        if (addToBackStack) {
            fragmentTransaction.addToBackStack(null);
        } else {
            mainPresenter.initActivityData();
        }
        fragmentTransaction.commitAllowingStateLoss();
    }

猜你喜欢

转载自blog.csdn.net/qq_36982160/article/details/82422101