我认为这很容易,但它让我难以置信。我有一个活动,显示一个自定义对话框,允许用户输入一些文本,然后确定并取消按钮定义。我使用show()显示它。但我无法弄清楚如何从对话框中取回数值。Android - 活动如何获得用户从对话框中输入的文本
我正在使用自定义对话框,因为它对文本条目进行了一些验证。我想我可以改变它从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;
}
并更新对话框的确定按钮点击:在活动的onCreate()显示的对话框
/**
* 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();
}
然后我说:
tagDialog = new tagDialog(this);
tagHandler = new Handler()
{
@Override
public void handleMessage(Message msg)
{
tag = tagDialog.tag;
}
};
tagDialog.AddHandler(tagHandler);
这些都是很好的建议,但这是一个让我沿着正确的道路解决我的问题的建议。我想事实证明,从我们希望的对话中获取数据并不那么容易。我将从我的最终解决方案发布代码。谢谢大家 – bursk 2010-12-09 23:00:19