从AlertDialog返回值

时间:2016-04-15 15:51:51

标签: java android 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
} 

3 个答案:

答案 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; 

应该做的工作。