2016-10-20 2 views
1

Итак, у меня есть меню, которое появляется при нажатии кнопки. В этом меню пользователь может ввести «Assignment Name», которое может быть строкой, и «Grade» и «Max Points Available», которые будут числами. Теперь я хочу убедиться, что Пользователь ничего не вводит или null в любом из этих полей EditText. Таким образом, есть способ отключить кнопку OK, пока не будет введен правильный ввод. Ниже приведено изображение того, как выглядит всплывающее окно.Android: отключить кнопку OK AlertDialogBuilder в определенных условиях.

enter image description here

Ниже мой код в MainActivity

Button add = (Button)findViewById(R.id.addBtn); 
add.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view){ 
      LayoutInflater li = LayoutInflater.from(context); 
      View promptsView = li.inflate(R.layout.add_individual_name, null); 

      AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context); 
      alertDialogBuilder.setView(promptsView); 

      final EditText assignmentName = (EditText) promptsView.findViewById(R.id.enteredIndividualName); 
      final EditText gradeReceived = (EditText) promptsView.findViewById(R.id.enteredUserGrade); 
      final EditText maxPoints = (EditText) promptsView.findViewById(R.id.enteredMaxPoints); 
      alertDialogBuilder.setCancelable(false) 
        .setPositiveButton("OK", new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int id) { 
          String name = assignmentName.getText().toString(); 
          String grade = gradeReceived.getText().toString(); 
          String totalPossible = maxPoints.getText().toString(); 
          checkIfNameAlreadyExists(name); 
         } 
        }) 
        .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int id) { 
          dialog.cancel(); 
         } 
        }); 

      final AlertDialog alertDialog = alertDialogBuilder.create(); 
      alertDialog.show(); 

     }}); 

Кроме того, я хочу, чтобы отключить кнопку "OK", если "Назначение Name" уже существует в моей базе данных. У меня есть функция, которая проверяет, выходит ли элемент в БД.

Сообщите мне, если вы хотите увидеть код для XML AlertDialog или еще что-нибудь еще.

Благодаря

ответ

1

Вы должны добавить TextWatcher для EditText. И в afterTextChanged просто проверьте условие включения/выключения кнопки OK

// Your alert dialog config 
... 
final AlertDialog alertDialog = alertDialogBuilder.create(); 
alertDialog.show(); 

// disable the button as default start 
alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false); 

// add TextWatcher for EditText 
editTextAssignmentName.addTextChangedListener(new TextWatcher() { 
    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {} 

    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) {} 

    @Override 
    public void afterTextChanged(Editable s) { 

     if (s.length() >= 1) { // add your condition here, in your case it is checkIfNameAlreadyExists 
      alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(true); 
     } else { 
      alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false); 
     } 
    } 
}); 
+0

Спасибо, что ответили. Но где именно я помещаю этот блок кода? Если я поставлю его перед строкой 'alertDialogBuilder.setCancelable (false)', тогда кнопка «ОК» просто исчезнет, ​​и если я поместил ее после этой строки, то это не повлияет. –

+0

попробуйте поместить блок кода, как мой ответ (после окончательного предупреждения AlertDialogDialog = alertDialogBuilder.create(); alertDialog.show();) –

+0

Это работало отлично, как я и ожидал. Большое спасибо! –

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

  • Нет связанных вопросов^_^