Android - Activity如何从Dialog中获取用户输入的文本

时间:2010-12-09 16:49:14

标签: android dialog

我认为这很容易,但它让我望而却步。我有一个Activity,它显示一个自定义对话框,允许用户输入一些文本,然后定义OK和Cancel按钮。我用show()显示它。但我无法弄清楚如何从Dialog中获取价值。

我正在使用自定义对话框,因为它对文本条目进行了一些验证。我想我可以将它改为派生自Activity然后使用startActivityForResult显示它,但至少基于我以前的旧Windows编程日 - 我认为从Android对话框中获取用户输入的值很容易。

我是否忽略了某种类型的回叫或听众机制?

我甚至尝试过这个简单的解决方案,但它不会让我分配值(1),除非它的修饰符设置为final,然后(2)如果我说确定使其成为最终,不会让我分配给因为“无法分配最终的局部变量值,因为它是在封闭类型中定义的”

    String value;

    final EditText input = (EditText)findViewById(R.id.theText); 

    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setView(input);
    builder.setPositiveButton("OK", new DialogInterface.OnClickListener() 
    {
        public void onClick(DialogInterface dialog, int whichButton) 
        {
            value = input.getText().toString();
            dialog.dismiss();
        }
    });
    builder.show();

[针对解决方案更新了EDIT] ============================

我最终做的主要是添加将Handler传递给对话框的功能。在对话框类中,我添加了:

   private Handler clientHandler = null;

   public void AddHandler(Handler client)
   {
      this.clientHandler = client;
   }

更新了Dialog的OK按钮,点击:

   /**
    * The user pressed the OK button
    * @param v
    */
   public void okClick(View v)
   {
      // save the entered string
      this.tag = this.tagEditText.getText().toString();

      if ( null != this.clientHandler )
      {
         // Notify the client to update itself
         this.clientHandler.sendMessage( clientHandler.obtainMessage());
      }

      cancel();
   }

然后在Activity的onCreate()中显示我添加的对话框:

 tagDialog = new tagDialog(this); 

 tagHandler = new Handler() 
 {
    @Override
    public void handleMessage(Message msg) 
    {
       tag = tagDialog.tag;               
    }
 };

 tagDialog.AddHandler(tagHandler);

3 个答案:

答案 0 :(得分:2)

将要保存的内容保存在onClickListener的{​​{1}}中。使用Dialog查找文本框,将文本保存到某处(或使用Handler),然后在Activity中检索保存的文本。

答案 1 :(得分:2)

除非我在这里遗漏了什么,否则静态字符串不会吗?

答案 2 :(得分:1)

听起来您想要向处理程序发送消息。使用obtainMessage()来获取 消息对象,然后通过消息队列将消息发送给处理程序。