【问题标题】:Android Input Dialog Return Input ValueAndroid 输入对话框返回输入值
【发布时间】:2011-06-26 13:46:36
【问题描述】:

我正在把头发拉到这个上面。

我有一个应用程序,当您按下菜单项时,我希望它显示输入警报对话框。当用户点击“确定”时,他们在对话框中的 EditText 中输入的文本希望被返回以供稍后在活动中使用。

所以我想把:

name = input.getText().toString(); //input is an EditView which is the setView() of the dialog

在“确定”按钮的 onClick 内可以工作,但不能。 Eclipse 告诉我我不能在 onClick 中设置名称,因为它不是最终名称,但是如果我将名称的定义更改为最终名称,它显然无法更改,因此无法在 onClick() 中设置。

这是该位的完整代码:

String routeName = "";

        AlertDialog.Builder alert = new AlertDialog.Builder(this);  

        alert.setTitle("Title");  
        alert.setMessage("Message");  

        // Set an EditText view to get user input   
        final EditText inputName = new EditText(this);  
        alert.setView(inputName);  

        alert.setPositiveButton("Set Route Name", new DialogInterface.OnClickListener() {  
        public void onClick(DialogInterface dialog, int whichButton) {  
            routeName = inputName.getText().toString();  
          }  
        }); 

        alert.show();

我一定是在做一些非常愚蠢的事情,因为我已经用谷歌搜索了很多年,但没有发现其他人有同样的问题。

谁能赐教?

感谢您的宝贵时间,

英菲尼迪菲兹

【问题讨论】:

  • 对不起!现在用代码更新了主要问题。

标签: android android-widget android-edittext android-alertdialog


【解决方案1】:

确实,您无法访问 onClick 中的任何内容,我认为这是一种匿名方法。您可以做的是获取上下文并从那里找到您的观点。它看起来像这样:

yourButton.setOnClickListener(new View.OnClickListener() {
        public boolean onClick(View v) {
               name = findViewById(R.id.yourInputId)).getText().toString();
               return true;
        }
);

您也可以使用v 参数,例如在您的侦听器中调用v.getContext()

【讨论】:

  • 感谢 Nanne 的回复,但我应该在哪里定义“yourButton”?那是“确定”按钮吗?因为看起来 AlertDialog 有一个特定的 setPositiveButton() 方法来创建该按钮。你的意思是我可以为自定义版本的对话框创建一个自定义视图,并在该视图中定义一个按钮,并让 yourButton findViewById 那个按钮?抱歉,我对正确的 android 开发还是很陌生。
  • 我没有看到问题的补充,但在这种情况下,它只是一个示例,有一些东西要展示。您可以忽略第一部分并从“setOnclickListener”部分读取;)
  • 我开始这样做了,但仍然不知道如何从 setOnClickListener 中获取 name 变量,因此为了解决这个问题,我将对话结果中的所有内容都卡在了函数,并且该函数在 onPositive() 监听器中被调用。
【解决方案2】:

您可以将routerName 设为成员变量。

【讨论】:

  • 哇!那很简单!谢谢 foobaa,但是使用 findViewById 等来获得 @Nanne 的工作方式会更好/更干净吗?
  • 好吧,这个方法的问题在于,当用户输入输入时,其余代码会运行,因为对话框是异步的。我的解决方案是按照我回复 Nanne 的方式行事。
猜你喜欢
  • 2014-02-14
  • 2012-05-18
  • 1970-01-01
  • 2011-12-09
  • 1970-01-01
  • 2012-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多