2016-07-10 4 views
0

У меня есть код ниже, который отключил AlertDialog при нажатии на поле EditText. Это работает отлично в первый раз, однако, если пользователь закрывает диалоговое окно, а затем снова нажимает на поле, приложение отключается.AlertDialog в onClick падает при втором нажатии

roomnumberPicker = new MaterialNumberPicker.Builder(SearchActivity.this) 
       .minValue(1) 
       .maxValue(15) 
       .defaultValue(1) 
       .textSize(20) 
       .enableFocusability(false) 
       .wrapSelectorWheel(true) 
       .build(); 

     roomEdit.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       new AlertDialog.Builder(SearchActivity.this) 
         .setView(roomnumberPicker) 
         .setTitle("Pick number of Rooms:") 
         .setPositiveButton(getString(android.R.string.ok), new DialogInterface.OnClickListener() { 
          @Override 
          public void onClick(DialogInterface dialog, int which) { 
           roomEdit.setText(Integer.toString(roomnumberPicker.getValue())); 
          } 
         }).show(); 

      } 
     }); 

Какие ошибки:

java.lang.IllegalStateException: Указанный ребенок уже имеет родителя. Сначала вы должны вызвать removeView() родителя ребенка.

ответ

0

[EDIT] Сделать номер комнаты окончательным. Вы сможете получить к нему доступ.

Ваш MaterialNumberPicker прикреплен к его родительскому объекту в первый раз. Итак, второй раз, когда вы пытаетесь добавить это снова к новому AlertDialog, он бросает вам это исключение.

Попробуйте это:

roomEdit.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
     final MaterialNumberPicker roomnumberPicker = new MaterialNumberPicker.Builder(SearchActivity.this) 
      .minValue(1) 
      .maxValue(15) 
      .defaultValue(1) 
      .textSize(20) 
      .enableFocusability(false) 
      .wrapSelectorWheel(true) 
      .build(); 
     new AlertDialog.Builder(SearchActivity.this) 
       .setView(roomnumberPicker) 
       .setTitle("Pick number of Rooms:") 
       .setPositiveButton(getString(android.R.string.ok), new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         roomEdit.setText(Integer.toString(roomnumberPicker.getValue())); 
        } 
       }).show(); 

    } 
});
+0

'roomnumberPicker.getValue()' не работает, как roomnumberPicker доступ из внутреннего класса –

+0

сделать окончательный roomnumberPicker. См. Мое редактирование выше. –

Смежные вопросы