使用AlertDialog.Builder保存对话框中的值



我是一个新的Android开发人员,有一个潜在的愚蠢问题
在我的活动创建中,我想制作一个弹出对话框来提示用户输入。然后,我想获取该输入并将其保存为全局变量以供以后使用。目前我有

 public class MgenActivity extends Activity {
// Instance Variables
String ip = "";
/**
 * On Create
 */
public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    setContentView(R.layout.main);
    String box = dialogBoxStart();
    this.ip = box;
    //more code 
    }
public String dialogBoxStart() 
{
    String returned = "";
    AlertDialog.Builder alert = new AlertDialog.Builder(this);
    alert.setTitle("MGEN Setup");
    alert.setMessage("Please enter the MGEN IP address such as n 9.42.68.69");
    // Set an EditText view to get user input
    final EditText input = new EditText(this);
    alert.setView(input);
    DialogInterface.OnClickListener listener = new DialogInterface.OnClickListener() 
    {
            public void onClick(DialogInterface dialog, int whichButton) 
            {
            //send user input to global?
            //this doesnt work: this.ip  = input.getText().toString();
            }
    };
    alert.setPositiveButton("Ok", listener);
    alert.setNegativeButton("Cancel",
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {
                    // Canceled.
                }
            });
    returned =  input.getText().toString();
    alert.show();
    return returned;
}

问题是我的EditText"input"没有保存用户输入,所以我无法向外保存。同样,我不能从onClick方法中与外部变量进行对话。

那么TLDR:如何保存对话框中的输入?

就这么简单。
DialogInterface.OnClickListener listener = new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int whichButton) {
        ip = input.getText().toString();
    }
};

对话框不阻止代码执行或UI线程。您显示对话框,用户单击"确定"按钮,为全局变量设置值,但使用它的代码已经执行。您当前的实现也是如此。dialogBoxStart()返回空值,因为它在用户输入任何内容之前获取输入值。

检查这个问题:Dialogs/AlertDialogs:How to"块执行";对话框打开时(.NET风格)

new AlertDialog.Builder(Main.this)
    .setTitle("Update Status")
    .setMessage(message)
    .setView(input)
    .setPositiveButton("Ok", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {
            Editable value = input.getText(); 
        }
    }).setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {
            // Do nothing.
        }
    }).show();

最新更新