簡體   English   中英

從 AlertDialog 返回一個值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM