我以为这很容易,但是让我难以理解.我有一个活动,该活动显示一个自定义对话框,允许用户输入一些文本,然后定义“确定”和“取消”按钮.我使用show()显示它.但是我不知道如何从对话框中获取值.
我使用的是自定义对话框,因为它会对文本输入进行一些验证.我想我可以将其更改为从Activity派生,然后使用startActivityForResult进行显示,但是-至少基于我以前的Windows编程天数-我认为从Android对话框中获取用户输入的值很容易.
我是否忽略了某种类型的回叫或监听器机制?
我什至尝试将其作为一个简单的解决方案,但是除非让它的修饰符设置为final,否则它不会让我分配给值(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();
[已更新解决方案的编辑] ============================
我最终要做的主要事情是添加了将Handler传递给对话框的功能.在对话框类中,我添加了:
private Handler clientHandler = null;
public void AddHandler(Handler client)
{
this.clientHandler = client;
}
并更新对话框的确定??按钮,单击:
/**
* 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);