我认为这很容易,但它让我望而却步。我有一个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);
答案 0 :(得分:2)
将要保存的内容保存在onClickListener
的{{1}}中。使用Dialog
查找文本框,将文本保存到某处(或使用Handler),然后在Activity中检索保存的文本。
答案 1 :(得分:2)
除非我在这里遗漏了什么,否则静态字符串不会吗?
答案 2 :(得分:1)
听起来您想要向处理程序发送消息。使用obtainMessage()来获取 消息对象,然后通过消息队列将消息发送给处理程序。