Подтвердить что ты не робот

Диалоговое окно Android диалоговое окно

У меня есть простая программа для отображения диалога с видом edittext в нем и прослушивания положительных/отрицательных кнопок, для выполнения пользовательского действия в каждом (прочитайте этот edittext и сохраните его содержимое в переменной активности).

Проблема возникает, когда я не вижу способа восстановить текущий диалог из диалогового интерфейса (а затем я не могу восстановить какой-либо вид в диалоговом окне).

Возможно, это вопрос noob, но после некоторых поисковых запросов Google я не могу ответить на него.

Мой код следующий

LayoutInflater li = LayoutInflater.from(this);
View myView = li.inflate(R.layout.my_layout, null);

AlertDialog.Builder cDialog = new AlertDialog.Builder(this);
cDialog.setView(myView);
cDialog.setPositiveButton(R.string.start_download, new   DialogInterface.OnClickListener() {
  @Override
  public void onClick(DialogInterface dialog, int which) {
    //here the code to retrieve dialog
  }
});
cDialog.create();

Есть ли какие-нибудь подсказки о том, где я могу это найти?

4b9b3361

Ответ 1

Вы можете получить представления из Dialog в onClick() с помощью:

EditText edit = (EditText) ((AlertDialog) dialog).findViewById(R.id.the_id_of_view);

Ответ 2

Этот путь отлично работает в моем коде:

public void onClick(DialogInterface dialog, int which) {

   Dialog dialog2 =Dialog.class.cast(dialog);
   EditText edit = (EditText) dialog2.findViewById(R.id.myedittext);

}

веселит

Ответ 3

У вас уже есть ссылка на представление, в котором есть текст редактирования. Почему бы не использовать его напрямую? Просто убедитесь, что вы сделали окончательный вид, чтобы получить доступ к нему в анонимном классе OnClickListener.

LayoutInflater li = LayoutInflater.from(this);
final View myView = li.inflate(R.layout.my_layout, null);
// don't forget to mark myView as final

AlertDialog.Builder cDialog = new AlertDialog.Builder(this);
cDialog.setView(myView);
cDialog.setPositiveButton(R.string.start_download, new   DialogInterface.OnClickListener() {
  @Override
  public void onClick(DialogInterface dialog, int which) {
    //here the code to retrieve dialog
    EditText edit = (EditText) myView.findViewById(R.id.the_id_of_view);
  }
});
cDialog.create();

Ответ 4

Вы можете получить Диалог, возвращенный из метода show() alertBuidler.

AlertDialog.Builder adb = new AlertDialog.Builder(YourActivity.this);
//...code to add methods setPositive an setNegative buttons

Вызвать show() метод adb и получить Dialog, как показано ниже:

final AlertDialog dialog = adb.show();

Таким образом, вы можете вызвать любую кнопку своего диалога в любой точке кода в своей деятельности:

dialog.getButton(DialogInterface.BUTTON_POSITIVE).performClick();//or
dialog.getButton(DialogInterface.BUTTON_NEGATIVE).performClick();//or
dialog.getButton(DialogInterface.BUTTON_NEUTRAL).performClick();

Ответ 5

Вы можете получить экземпляр диалога с помощью следующего кода:

  val builder = AlertDialog.Builder(this)
    builder.setMessage(R.string.eneter_url_message)
        .setView(R.layout.input_dialog)
        .setPositiveButton(R.string.OK) { dialog, _ -> validateUrl(dialog) }
        .setNegativeButton(R.string.CANCEL) { dialog, _ -> dialog.dismiss() }
    val dialog = builder.create()
    dialog.show()
    urlInput = dialog.findViewById(R.id.urlInput)

Как только вы вызываете dialog.show(), вы можете найти любые завышенные представления с помощью findViewById