【发布时间】:2014-03-17 21:00:13
【问题描述】:
我有一个处理用户注册的活动 (FragmentActivity)。当任务在活动中异步处理时,单击按钮会显示 DialogFragment。然后在处理完任务后,将关闭 FragmentDialog。一切运行顺利,即使配置更改(如改变方向),但我发现如果我在后台任务运行时按下主页按钮,应用程序在它试图关闭 FragmentDialog 并且当我重新启动应用程序时崩溃,我发现对话框仍在运行。
我搜索并找到了很多讨论、解决方案和解决方法,here、here 和 here。但我无法实施其中任何一个来解决我的问题。
这是我的工作:
为注册用户点击按钮调用的方法:
private void startRegDialog(final String phoneNumber, String password) {
Log.i("tag", "startregdailog called");
verifiedUser = false;
//start Dialog fragment here.
final SignUpDialogFragment mDialogFragment = SignUpDialogFragment.newInstance();
mDialogFragment.show(getSupportFragmentManager(), "dailogFragment");
ParseUser CreateNewUser = new ParseUser();
CreateNewUser.setUsername(phoneNumber);
CreateNewUser.setPassword(password);
CreateNewUser.put("userVerified", verifiedUser);
Log.i("tag", "starting task");
CreateNewUser.signUpInBackground(new SignUpCallback() {
@Override
public void done(ParseException e) {
Log.i("tag", "task done");
//Dismiss Dialog after receiving result
if(mDialogFragment !=null){
mDialogFragment.dismiss();
}
if(e != null){
Log.i("Tag", "user not Created");
String errorMessage = e.getMessage().toString();
onError(errorMessage);
}
else {
Log.i("Tag", "userSuccessfully Created");
Intent VerifyAccount = new Intent(context, VerifyAccount.class);
VerifyAccount.putExtra("phoneNo", phoneNumber);
startActivity(VerifyAccount);
}
}
});
}
这里是 LOGCAT 输出
03-17 22:12:40.070: E/AndroidRuntime(16000): FATAL EXCEPTION: main
03-17 22:12:40.070: E/AndroidRuntime(16000): java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
03-17 22:12:40.070: E/AndroidRuntime(16000): at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1343)
03-17 22:12:40.070: E/AndroidRuntime(16000): at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1361)
03-17 22:12:40.070: E/AndroidRuntime(16000): at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:595)
03-17 22:12:40.070: E/AndroidRuntime(16000): at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:574)
03-17 22:12:40.070: E/AndroidRuntime(16000): at android.support.v4.app.DialogFragment.dismissInternal(DialogFragment.java:189)
03-17 22:12:40.070: E/AndroidRuntime(16000): at android.support.v4.app.DialogFragment.dismiss(DialogFragment.java:155)
03-17 22:12:40.070: E/AndroidRuntime(16000): at com.example.razcat.CreateAccount$3.done(CreateAccount.java:273)
03-17 22:12:40.070: E/AndroidRuntime(16000): at com.parse.SignUpCallback.internalDone(SignUpCallback.java:39)
03-17 22:12:40.070: E/AndroidRuntime(16000): at com.parse.SignUpCallback.internalDone(SignUpCallback.java:1)
03-17 22:12:40.070: E/AndroidRuntime(16000): at com.parse.Parse$6$1.run(Parse.java:834)
03-17 22:12:40.070: E/AndroidRuntime(16000): at android.os.Handler.handleCallback(Handler.java:615)
03-17 22:12:40.070: E/AndroidRuntime(16000): at android.os.Handler.dispatchMessage(Handler.java:92)
03-17 22:12:40.070: E/AndroidRuntime(16000): at android.os.Looper.loop(Looper.java:155)
03-17 22:12:40.070: E/AndroidRuntime(16000): at android.app.ActivityThread.main(ActivityThread.java:5454)
03-17 22:12:40.070: E/AndroidRuntime(16000): at java.lang.reflect.Method.invokeNative(Native Method)
03-17 22:12:40.070: E/AndroidRuntime(16000): at java.lang.reflect.Method.invoke(Method.java:511)
03-17 22:12:40.070: E/AndroidRuntime(16000): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1029)
03-17 22:12:40.070: E/AndroidRuntime(16000): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:796)
03-17 22:12:40.070: E/AndroidRuntime(16000): at dalvik.system.NativeStart.main(Native Method)
Please any help would be useful thanks.
【问题讨论】:
-
是否有任何关于崩溃的 logcat 输出可以与我们分享?
-
我忘了补充,刚刚做了。
-
CreateAccount.java,第 273 行?
-
这就是我关闭对话的地方,
mDialogFragment.dismiss(); -
放这行代码 if(mDialogFragment !=null){ mDialogFragment.dismiss(); } 在 if 和 else 中并从那里删除该代码然后尝试。另外,如果它不起作用,请尝试在创建对话框片段时调用 setRetainInstance(true)。