我试过以下代码,
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");
}
Run Code Online (Sandbox Code Playgroud)
但我收到以下异常,我的应用程序崩溃了.
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)
Run Code Online (Sandbox Code Playgroud)
newFragment.show(ft, "dialog")
Run Code Online (Sandbox Code Playgroud)
show calls内部提交.所以你可能想要摆脱
ft.commitAllowingStateLoss();
Run Code Online (Sandbox Code Playgroud)
或者你可以摆脱
newFragment.show(ft, "dialog");
Run Code Online (Sandbox Code Playgroud)
添加电话
ft.add(newFragment, "dialog");
ft.commitAllowingStateLoss();
Run Code Online (Sandbox Code Playgroud)
编辑
这是什么DialogFragment的show()样子
public int show(FragmentTransaction transaction, String tag) {
mDismissed = false;
mShownByMe = true;
transaction.add(this, tag);
mViewDestroyed = false;
mBackStackId = transaction.commit();
return mBackStackId;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5601 次 |
| 最近记录: |