从 AlertDialog 返回一个值
Returning A Value From AlertDialog
我想构建一个函数来创建 AlertDialog 和 return 用户输入的字符串,这是我用于创建对话框的函数,我如何 return 值?
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
}
在同一个 class 中创建另一个接受字符串值的方法,然后调用该函数提供 setPositiveButton
onclick 事件
中的值 input.getText().toString()
在我看来,您已将输入文本的值存储在 m_Text 字段中。您可以只 return 那个字段,或者在函数中有一个变量,您可以在其中存储要 returned 的值。
你在哪里:
//Return string
只需替换为:
return m_Text;
应该完成这项工作。
打开您的 AlertDialog
的调用 builder.show()
不是阻塞调用,这意味着下一条指令将在不等待 AlertDialog
完成的情况下执行(return ).您应该与其交互的方式是使用某种回调。例如,您的 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);
}
});
我想构建一个函数来创建 AlertDialog 和 return 用户输入的字符串,这是我用于创建对话框的函数,我如何 return 值?
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
}
在同一个 class 中创建另一个接受字符串值的方法,然后调用该函数提供 setPositiveButton
onclick 事件
input.getText().toString()
在我看来,您已将输入文本的值存储在 m_Text 字段中。您可以只 return 那个字段,或者在函数中有一个变量,您可以在其中存储要 returned 的值。
你在哪里:
//Return string
只需替换为:
return m_Text;
应该完成这项工作。
打开您的 AlertDialog
的调用 builder.show()
不是阻塞调用,这意味着下一条指令将在不等待 AlertDialog
完成的情况下执行(return ).您应该与其交互的方式是使用某种回调。例如,您的 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);
}
});