onActivity中的操作结果和“错误在 onSaveInstanceState 之后无法执行此操作”

2022-08-31 21:18:23

实现用户可以登录的应用时,我遇到以下情况:如果用户已登录,请执行操作,否则启动结果的登录活动,如果结果Activity.RESULT_OK执行操作。

我的问题是,执行操作是显示一个DialogFragment,但调用

DialogFragment newFragment = MyDialogFragment.newInstance(mStackLevel);
newFragment.show(ft, "dialog")

在 onActivityResult 中,回调引发异常:

Caused by: java.lang.IllegalStateException:  
Can not perform this action after onSaveInstanceState

那么我该如何解决这个问题呢?我正在考虑在那里举起一面旗帜,并在onResume中显示对话,但我看到这个解决方案有点脏

编辑:添加了更多代码(我遵循此示例以显示对话框碎片

当用户请求操作时:

... 
if (!user.isLogged()){
 startActivityForResult(new Intent(cnt, Login.class), REQUEST_LOGIN_FOR_COMMENT);
}

在同一片段中

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == REQUEST_LOGIN_FOR_COMMENT && resultCode == Activity.RESULT_OK) {
        FragmentTransaction ft = getFragmentManager().beginTransaction();
        DialogFragment newFragment = MyDialogFragment.newInstance();
        newFragment.show(ft, "dialog")
    }
}

如果用户登录登录活动调用;

setResult(Activity.RESULT_OK);
finish();

答案 1

我想到的最好的事情是不要使用.show(),而是这样做。

CheckinSuccessDialog dialog = new CheckinSuccessDialog();
//dialog.show(getSupportFragmentManager(), null);
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(dialog, null);
ft.commitAllowingStateLoss();

答案 2

以下是适用于我的解决方法。

private void alert(final String message) {
    Handler handler = new Handler(Looper.getMainLooper());
    handler.post(new Runnable() {
        public void run() {
            AlertDialogFragment alertDialogFragment = AlertDialogFragment.newInstance(message);
            alertDialogFragment.show(getFragmentManager(), ALERT_DIALOG_FRAGMENT);
        }
    });        
}

推荐