我想构建一个创建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
}
答案 0 :(得分:3)
在进入解决方案之前,我想解释一下你可能忽略的一些事情。
当您显示- current_user.self_and_descendants.unscope(:order).order(:depth, :lft).each do |user|
- case user.depth
- when 0
-# inject id and data-target, render _person.html.haml
- when 1
-# inject id and data-target, render _person.html.haml
-# etc
时,您的代码会继续运行,并且不会等待它完成(AlertDialog
调用继续执行而不等待openDialog()
返回任何内容), #39;为什么你有onClickListeners来处理你的回调(表达当用户点击对话框确定按钮或当他解散它时你应该做什么)。
实现你想要的一个简洁方法是创建一个功能接口(一个接口有一个方法),并使用它来处理你的回调(让它返回你的字符串或其他)。
AlertDialog
然后你会改变你的方法:
interface OnOk{
void hereIsYouText (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.hereIsYourText(input.getText().toString());
}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
//TODO: you should handle this event as well!
}
});
builder.show();
}
我提供了这个答案,以演示如何在不完全改变代码的情况下以异步方式实现您的要求。
答案 1 :(得分:0)
在接受字符串值的同一个类中创建另一个方法,然后从type2
onclick事件中调用提供input.getText().toString()
值的函数
答案 2 :(得分:0)
这让我觉得你已经在m_Text字段中存储了输入文本的值。您可以只返回该字段,也可以在函数中包含要存储要返回的值的变量。
你在哪里:
//Return string
只需替换为:
return m_Text;
应该做的工作。