2016-08-03 3 views
2

Я работаю над AlertDialog для редактирования элемента списка. Я могу передать макет редактора с Builder.setView, и я могу получить результат от обратного вызова положительной кнопки, но я не вижу способа инициализировать представление. E. g. есть EditText, который должен отображать определенную строку и так далее. Это выполнимо?AlertDialog.Builder с пользовательским представлением: как инициализировать представление?

Я понимаю, что могу подкласс Dialog, но тогда мне кажется, что для получения того же результата мне понадобится еще код полезности. Кажется менее чистым.

+0

«есть n EditText, который должен отображаться ... ".. Является ли эта часть вашего представления для' setView'? – Shaishav

+0

@Shaishav: точно. –

+0

Является ли текст редактирования определенным в файле макета? Если да, укажите имя файла макета? – W0rmH0le

ответ

5

Просто сохранить ссылку на мнение раздувая его заранее :

LayoutInflater inflater = this.getLayoutInflater(); 
View dialogView = inflater.inflate(R.layout.alert_label_editor, null); 
dialogBuilder.setView(dialogView); 

Тогда, получите ссылку на ваш EditText как:

EditText editText = (EditText) dialogView.findViewById(R.id.label_field); 
1

Это очень простой пример покажет вам, как создать оповещения диалог с EditText (не использовать макет XML, сделать это программно)

public void showDialogWithEditText(){ 
     AlertDialog.Builder alert = new AlertDialog.Builder(this); 
     final EditText edittext = new EditText(this); 
     alert.setTitle("Enter your name:"); 
     alert.setView(edittext); 

     alert.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int whichButton) { 
       String value = edittext.getText().toString(); 
       // use the value. 

      } 
     }); 

     alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int whichButton) { 
       // cancel 
      } 
     }); 

     alert.show(); 
    } 
+1

Я думаю, что вы отвечали на другой вопрос от меня, но я вдруг понял, как делать то, что мне нужно, когда вы читаете свой ответ :) Я должен создать экземпляр представления сначала (в этом случае - EditText'), инициализируйте его, а THEN передайте его строителю и вызовите 'create(). show()'. –

+0

Да, если у вас несколько видов макета, вы должны определить и раздуть его из XML (ответ Shaishav). Затем используйте setView (...) :) мой ответ просто немного полезен для вас :) – alway5dotcom

+0

Вы также можете сделать то же самое с «Диалогом», мой короткий отзыв здесь: https://davidng94.wordpress.com/ 2015/12/16/андроид-заказ-а-простой диалог / – alway5dotcom