[英]Returning A Value From AlertDialog
我想构建一个函数来创建一个 AlertDialog 并返回用户输入的字符串,这是我用于创建对话框的函数,我如何返回值?
String m_Text = "";
private String openDialog(String title) {
AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext());
builder.setTitle(title);
final EditText input = new EditText(view.getContext());
input.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_NORMAL);
builder.setView(input);
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
m_Text = input.getText().toString();
}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
builder.show();
// return string
}
打开AlertDialog
的调用builder.show()
不是阻塞调用,这意味着下一条指令将在不等待AlertDialog
完成(返回)的情况下执行。 您应该与之交互的方式是使用某种回调。 例如,您的OnClickListeners
是这种模式的实现。
实现您想要的一种干净的方法是创建一个功能接口,它是一个只有一种方法的接口。 您将使用它来处理您的回调。
interface OnOK{
void onTextEntered(String text);
}
然后你会改变你的方法是这样的:
private void openDialog(String title, final OnOK onOK) {
AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext());
builder.setTitle(title);
final EditText input = new EditText(view.getContext());
input.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_NORMAL);
builder.setView(input);
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//Oi, look at this line!
onOK.onTextEntered(input.getText().toString());
}
});
builder.show();
}
你可以这样使用它:
openDialog("Title", new OnOK() {
@Override
onTextEntered(String text) {
Log.i("LOG", text);
}
});
在同一个类中创建另一个接受字符串值的方法,然后从setPositiveButton
onclick 事件调用该函数提供input.getText().toString()
的值
这在我看来就像您已将输入文本的值存储在 m_Text 字段中。 您可以只返回该字段,也可以在存储要返回值的函数中使用一个变量。
你有:
//Return string
简单地替换为:
return m_Text;
应该做的工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.