簡體   English   中英

Android - Activity如何從Dialog中獲取用戶輸入的文本

[英]Android - how can an Activity get user entered text from a Dialog

我認為這很容易,但它讓我望而卻步。 我有一個Activity,它顯示一個自定義對話框,允許用戶輸入一些文本,然后定義OK和Cancel按鈕。 我用show()顯示它。 但我無法弄清楚如何從Dialog中獲取價值。

我正在使用自定義對話框,因為它對文本條目進行了一些驗證。 我想我可以將它改為派生自Activity然后使用startActivityForResult顯示它,但至少基於我以前的舊Windows編程日 - 我認為從Android對話框中獲取用戶輸入的值很容易。

我是否忽略了某種類型的回叫或聽眾機制?

我甚至試過這個作為一個簡單的解決方案,但它不讓我分配值(1),除非它的修飾符設置為final,然后(2)如果我說確定使其成為最終,不會讓我分配給它因為“無法分配最終的局部變量值,因為它是在封閉類型中定義的“

    String value;

    final EditText input = (EditText)findViewById(R.id.theText); 

    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setView(input);
    builder.setPositiveButton("OK", new DialogInterface.OnClickListener() 
    {
        public void onClick(DialogInterface dialog, int whichButton) 
        {
            value = input.getText().toString();
            dialog.dismiss();
        }
    });
    builder.show();

[EDIT更新解決方案] ============================

我最終做的主要是添加將Handler傳遞給對話框的功能。 在對話框類中我添加了:

   private Handler clientHandler = null;

   public void AddHandler(Handler client)
   {
      this.clientHandler = client;
   }

並更新了Dialog的OK按鈕,點擊:

   /**
    * The user pressed the OK button
    * @param v
    */
   public void okClick(View v)
   {
      // save the entered string
      this.tag = this.tagEditText.getText().toString();

      if ( null != this.clientHandler )
      {
         // Notify the client to update itself
         this.clientHandler.sendMessage( clientHandler.obtainMessage());
      }

      cancel();
   }

然后在Activity的onCreate()中顯示我添加的Dialog:

 tagDialog = new tagDialog(this); 

 tagHandler = new Handler() 
 {
    @Override
    public void handleMessage(Message msg) 
    {
       tag = tagDialog.tag;               
    }
 };

 tagDialog.AddHandler(tagHandler);

Dialog onClickListener中保存要保存的內容。 使用dialog.findViewById()查找文本框,將文本保存到某處(或使用Handler),然后在Activity中檢索保存的文本。

除非我在這里遺漏了什么,否則靜態字符串不會嗎?

聽起來您想要向處理程序發送消息。 使用obtainMessage()獲取Message對象,然后通過消息隊列將Message發送給Handler。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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