Android - как Activity может получить введенный пользователем текст из диалога - PullRequest
3 голосов
/ 09 декабря 2010

Я думал, что это будет легко, но это ускользает от меня. У меня есть действие, которое отображает настраиваемое диалоговое окно, которое позволяет пользователю вводить некоторый текст, а затем определены кнопки «ОК» и «Отмена». Я отображаю это с помощью show (). Но я не могу понять, как вернуть значение из диалога.

Я использую пользовательский диалог, потому что он выполняет некоторую проверку ввода текста. Думаю, я мог бы изменить его на производное от 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();

[ПРАВКА обновлена ​​для решения] ============================

Главное, что я закончил, это добавление возможности передавать обработчик в диалог. В диалоговом классе я добавил:

   private Handler clientHandler = null;

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

И обновил нажатие кнопки ОК в диалоге:

   /**
    * 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();
   }

Затем в onCreate () Действия, которое отображает диалог, который я добавил:

 tagDialog = new tagDialog(this); 

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

 tagDialog.AddHandler(tagHandler);

Ответы [ 3 ]

2 голосов
/ 09 декабря 2010

Если я что-то здесь упустил, разве не подойдет статическая строка?

2 голосов
/ 09 декабря 2010

Сохраните материал, который вы хотите сохранить в onClickListener вашего Dialog. Используйте dialog.findViewById(), чтобы найти текстовое поле, сохранить текст где-нибудь (или использовать обработчик), а затем в разделе «Активность» получить сохраненный текст.

1 голос
/ 09 декабря 2010

Звучит так, будто вы хотите отправить сообщение обработчику.Используйте receiveMessage (), чтобы получить объект Message, затем отправьте сообщение обработчику через его очередь сообщений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...