从带有结果的对话框或活动返回

zid*_*sk8 17 android dialog android-activity

我想知道我是否可以冻结当前的Activity,而我等待另一个活动或对话(任何可以)完成.

我知道我可以为结果启动一个活动,并在那里处理它们,但是startActivityForResult()之后的代码仍然会被执行

这是我想做的事情:

PopupDialog dialog = new PopupDialog(this,android.R.style.Theme_Black_NoTitleBar);
dialog.show();
// wait here, and continue the code after the dialog has finishes
int result = getResultFromDialogSomehow();
if (result == 1){
    //do something
}else{
    //do something else
}
Run Code Online (Sandbox Code Playgroud)

我知道这听起来很奇怪,但是如果有人能告诉我如何实现这样的功能,我真的很感激.

Lab*_*lan 10

您也onActivityResult可以
在主要活动中使用
startActivityForResult(intent, 1); //here 1 is the request code

在您的Dialog类中

Intent intent = new Intent();
intent.putExtra(....) //add data if you need to pass something
setResult(2,intent); //Here 2 result code
Run Code Online (Sandbox Code Playgroud)

所以你的主要活动

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
if (resultCode == 2 && requestCode ==1){
    //do something
}else{
    //do something else
}
}
Run Code Online (Sandbox Code Playgroud)

  • 你在哪里看到对话框中的`setResult`方法? (3认同)

Dha*_*dra 10

在对话框中如果您想要一个对话框结果,那么您的方式不是获得对话结果的正确方法.而不是你在Android中的方式有​​一个回调方法,可以在您选择对话框按钮后执行

例如

AlertDialog.Builder builder = new AlertDialog.Builder(getDialogContext());
builder.setMessage("Message");
builder.setPositiveButton("Yes", new Dialog.OnClickListener() {

    @Override
    public void onClick(DialogInterface dialog, int which) { 
        Toast.makeText(this, "Yes", Toast.LENGTH_SHORT).show();
        dialog.cancel();
    }

});

builder.setNegativeButton("No", new Dialog.OnClickListener() {

    @Override
    public void onClick(DialogInterface dialog, int which) {
        Toast.makeText(this, "Yes", Toast.LENGTH_SHORT).show();
        dialog.cancel();

    }

});

builder.show();
Run Code Online (Sandbox Code Playgroud)

当您运行此代码时,onClick方法内部的代码将不会执行,但是当您单击对话框的按钮时它将执行.当您单击对话框上的任何按钮时,您将获得一个回调方法onClick,它将执行.