交付结果失败,ResultInfo | java.lang.IllegalStateException: onSaveInstanceState之后无法执行此操作。

4

我有一个简单的应用程序,首先显示MainActivity,然后在MainActivity可见后,我显示TransparentActivity,之后在点击事件中关闭TransparentActivity并创建并显示对话框。在最后一步时,我遇到了错误。

错误

Failure delivering result ResultInfo{who=null, request=1234, result=-1, data=Intent {  }} to activity {com.example.kylu.layout/com.example.kylu.layout.GuidePhotoAlbum}: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState

MainActivity

public class MainActivity extends FragmentActivity
{
public static boolean flag=false;
    private static int REQUEST_CODE = 1234;

    @Override public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mylayout);
    }

@Override
protected void onResume() {
    super.onResume();
    //transparentShows only once
    if(!flag)
    {
        Intent i = new Intent(this, TransparentTip.class);
        startActivityForResult(i, REQUEST_CODE);
        flag=true;
    }
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
        if (REQUEST_CODE == requestCode) {
            if (resultCode == Activity.RESULT_OK) {
                Toast.makeText(this, "Show dialog", Toast.LENGTH_SHORT).show();
                DialogChoiceActivity dialogChoiceActivity = new DialogChoiceActivity();
                dialogChoiceActivity.show(getSupportFragmentManager(),"mydialog");
            } else if (resultCode == Activity.RESULT_CANCELED) {
                Toast.makeText(this, "Don't show dialog", Toast.LENGTH_SHORT).show();
            }
        }
    }

透明提示

    public class TransparentTip extends Activity {

        public static int countTransp=0;
        @Override
        protected void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.transparent_tip);
            Button ok=(Button)findViewById(R.id.bToK);
        }

        public void buttonClick(View view)
        {
            if (view.getId() == R.id.bToK)
            {
                final Intent intent = new Intent();
                setResult(Activity.RESULT_OK, intent);
                finish();
            }
        }

DialogChoiceActivity

public class DialogChoiceActivity extends DialogFragment {

    LayoutInflater inflater;
    View v;

    public Dialog onCreateDialog(Bundle savedInstanceState) {

        inflater = getActivity().getLayoutInflater();
        v = inflater.inflate(R.layout.dialog_email, null);
        final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setTitle("Email " + " 1/10");
        builder..setNegativeButton("Exit", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Intent intent = new Intent(getActivity(), MainActivity.class);
                startActivity(intent);
            }
        });
        return builder.create();
    }
}

透明界面不再可见后,我想在MainActivity上显示对话框。我尝试在onResume中显示此对话框,但是遇到了类似的错误。

1
dialogChoiceActivity.show(getSupportFragmentManager(),"mydialog"); 调用了DialogChoiceActivity,若存在问题请在此处贴上相应代码。 - Hitesh Gehlot
@HiteshGehlot 好的,我放置了对话框的代码。 - user7807288
我必须承认,如果我通常在没有透明度的情况下调用这个对话框,它是有效的,因此问题不在这里。 - user7807288
2个回答

8
如果您将以下代码行添加到onActivityResult中,它应该可以正常工作:
super.onActivityResult(requestCode,resultCode,intent);

因此,你的onActivityResult应该像这样:

 protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
    super.onActivityResult(requestCode,resultCode,intent);
    if (REQUEST_CODE == requestCode) {
        if (resultCode == Activity.RESULT_OK) {
            Toast.makeText(this, "Show dialog", Toast.LENGTH_SHORT).show();
            DialogChoiceActivity dialogChoiceActivity = new DialogChoiceActivity();
            dialogChoiceActivity.show(getSupportFragmentManager(),"mydialog");
        } else if (resultCode == Activity.RESULT_CANCELED) {
            Toast.makeText(this, "Don't show dialog", Toast.LENGTH_SHORT).show();
        }
    }
}

0

你可以使用 dialogChoiceActivity.show(getFragmentManager(),"mydia‌​log");

这一行有语法错误,应该改为 builder.setNegativeButton("Exit", new DialogInterface.OnClickListener() {


1
下一个盲人,我写道对话框不是问题,因为如果我不显示透明活动,我可以毫无问题地显示它,我没有在这里放置所有的200行代码,只是简单的对话框,所以这就是为什么有2个点,只是编辑代码时的错误。 - user7807288
我无法使用getFragmentManager(),所以你的回答是无用的。 - user7807288

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接