当前位置: 首页 > 面试题库 >

onActivityResult中的操作和“ onSaveInstanceState之后错误无法执行此操作”

公良修竹
2023-03-14
问题内容

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

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

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

在onActivityResult回调中引发异常

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

那么我该如何解决呢?我正在考虑在此处举一个标志并在onResume中显示对话框,但我看到此解决方案有点脏

编辑:添加了更多的代码(此示例之后的Im来显示DialogFragment

当用户请求操作时:

... 
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")
    }
}

并且如果用户登录了Login活动调用;

setResult(Activity.RESULT_OK);
finish();

问题答案:

我想出的最好的办法是不使用.show()而是这样做。

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


 类似资料: