加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java.lang.IllegalStateException:已经调用了commit

发布时间:2020-12-15 04:28:29 所属栏目:Java 来源:网络整理
导读:我试过以下代码, try { final Activity activity = ctx; FragmentTransaction ft = activity.getFragmentManager().beginTransaction(); android.app.Fragment prev = activity.getFragmentManager().findFragmentByTag("dialog"); if (prev != null) { ft.r
我试过以下代码,

try {
    final Activity activity = ctx;
    FragmentTransaction ft = activity.getFragmentManager().beginTransaction();
    android.app.Fragment prev = activity.getFragmentManager().findFragmentByTag("dialog");
    if (prev != null) {
        ft.remove(prev);
    }
    DialogServiceFailed newFragment = DialogServiceFailed.newInstance(pageName,onServiceFailed);
    newFragment.show(ft,"dialog");
    ft.addToBackStack(null);
    ft.commitAllowingStateLoss();
} catch (ClassCastException e) {
    Log.d("Log","Can't get the fragment manager with this");
}

但我收到以下异常,我的应用程序崩溃了.

java.lang.IllegalStateException: commit already called
        at android.app.BackStackRecord.commitInternal(BackStackRecord.java:582)
        at android.app.BackStackRecord.commitAllowingStateLoss(BackStackRecord.java:578)
        at com.brightspot.extrain5psim.model.APIRequestHandler.loadServiceFailedDialog(APIRequestHandler.java:99)
        at com.brightspot.extrain5psim.view.fragments.LoginFragment.setOnAsyncTaskCompleted(LoginFragment.java:201)
        at com.brightspot.extrain5psim.model.APIRequestHandler.onPostExecute(APIRequestHandler.java:80)
        at com.brightspot.extrain5psim.model.APIRequestHandler.onPostExecute(APIRequestHandler.java:17)
        at android.os.AsyncTask.finish(AsyncTask.java:631)
        at android.os.AsyncTask.access$600(AsyncTask.java:177)
        at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:176)
        at android.app.ActivityThread.main(ActivityThread.java:5317)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:511)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
        at dalvik.system.NativeStart.main(Native Method)

解决方法

newFragment.show(ft,"dialog")

show calls内部提交.所以你可能想要摆脱

ft.commitAllowingStateLoss();

或者你可以摆脱

newFragment.show(ft,"dialog");

添加电话

ft.add(newFragment,"dialog");
ft.commitAllowingStateLoss();

编辑

这就是DialogFragment的show()的样子

public int show(FragmentTransaction transaction,String tag) {
        mDismissed = false;
        mShownByMe = true;
        transaction.add(this,tag);
        mViewDestroyed = false;
        mBackStackId = transaction.commit();
        return mBackStackId;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读