2013-07-07 3 views
2

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

buildInfos.setPositiveButton(android.R.string.ok, new OnClickListener() { 

    @Override 
    public void onClick(DialogInterface dialog, int which) { 
     infosDesc = inputInfos.getText().toString(); 
     Log.i("DESC", infosDesc); 
     drawBetween2LastPoints(getAlertColor(alertType), "title", infosDesc); 
    } 
}); 

AlertDialog buildInfosDialog = buildInfos.create(); 
buildInfosDialog.show(); 
if(infosDesc.isEmpty()){ 
    buildInfosDialog.getButton(Dialog.BUTTON_POSITIVE).setEnabled(false); 
} 
+0

проверка [это ранее пост] (http://stackoverflow.com/questions/7403040/how-do-you-disable-a-button-inside-of -an-alertdialog-follow-up-question) –

+0

Вот почему я сделал это на трех последних строках кода, но даже если я поместил строку в диалоговом окне, положительная кнопка не активируется – user1949397

ответ

7

В коде выше, вы убедитесь, что поле пустое сразу после отображения диалогового окна. Вам нужно будет посмотреть содержимое EditText s для изменения. С этой целью вы можете добавить TextWatcher в поле, используя addTextChangedListener(TextWatcher)-method.

В TextWatcher перезаписать метод afterTextChanged(Editable), который вызывается каждый раз, когда содержимое поля изменяется (что-то было добавлено/удалено). В нем проверьте, есть ли что-нибудь в EditText. Если есть, активируйте кнопку. Если нет, отключите его.

Вот пример реализации:

public class Main extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     Button button = new Button(this); 
     button.setText("Show Dialog"); 
     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       showDialog(); 
      } 
     }); 

     setContentView(button); 
    } 

    private void showDialog(){ 
     // Create the field to show in the Dialog: 
     final EditText field = new EditText(this); 

     // Now create the Dialog itself. 
     final AlertDialog dialog = new AlertDialog.Builder(this) 
       .setMessage("Enter something") 
       .setPositiveButton("O.K.", new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialogInterface, int i) { 
         Toast.makeText(Main.this, "Submitted with \""+field.getText().toString()+"\"", 
           Toast.LENGTH_LONG).show(); 
        } 
       }).setCancelable(true).setView(field) 
       .create(); 

     // The TextWatcher will look for changes to the Dialogs field. 
     field.addTextChangedListener(new TextWatcher() { 
      @Override public void beforeTextChanged(CharSequence c, int i, int i2, int i3) {} 
      @Override public void onTextChanged(CharSequence c, int i, int i2, int i3) {} 

      @Override 
      public void afterTextChanged(Editable editable) { 
       // Will be called AFTER text has been changed. 
       if (editable.toString().length() == 0){ 
        dialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false); 
       } else { 
        dialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(true); 
       } 
      } 
     }); 

     // Show the Dialog: 
     dialog.show(); 
     // The button is initially deactivated, as the field is initially empty: 
     dialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false); 
    } 
} 
+0

Спасибо, я добавил TextWatcher и теперь кнопка активируется, когда я помещаю строку. Но если я удалю строку, кнопка не отключается, вот мой код. – user1949397

+0

@ user1949397 Посмотрите пример, который я добавил. –

+0

Спасибо, ребята, он отлично работает. – user1949397