gpt4 book ai didi

java - 从 AlertDialog 返回一个值

转载 作者:搜寻专家 更新时间:2023-11-01 08:35:54 25 4
gpt4 key购买 nike

我想构建一个函数来创建 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),它是一个只有一个方法的接口(interface)。您将使用它来处理您的回调。

例子

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);
}
});

关于java - 从 AlertDialog 返回一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36651655/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com