¿Cómo desactivar dinámicamente botones en un cuadro de diálogo?
El comando básico es configurar el botón "Aceptar" como deshabilitado (falso).
Cree un cuadro de diálogo personalizado con EditText y dos botones (Aceptar y Cancelar)
Si desea que no se pueda hacer clic en el botón Aceptar cuando EditText esté vacío, puede hacer esto (pero ¡Hay un problema con esto!). .
Diálogo público customDialog(Context dialogContext){
final AlertDialog.Builder = new AlertDialog.Builder(dialogContext);
builder.setView(editText); //poner un EditText en el cuadro de diálogo
builder.setTitle(R.string.fastdialer_add_number_title); //Establecer el título del cuadro de diálogo
builder.setPositiveButton(android.R. string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// Ejecuta la operación. después de hacer clic en Aceptar....
}
});
// Quiere obtener el botón Aceptar. Inicialice el botón Aceptar
Finalmente Botón positivButton = ((AlertDialog)dialog).getButton(AlertDialog.BUTTON_POSITIVE);
if(edittext.getText().toString.equal("" ) )
positiveButton.setEnabled(false);
editText.getText().toString.equal("")addTextChangedListener(//establece el texto del campo de edición InputListener p >
new TextWatcher(){
@Override
public void afterTextChanged(Editable arg0) {
if(arg0.toString().equals ( "")){ // No se puede hacer clic en el botón de configuración cuando la barra de edición está vacía.
positiveButton.setEnabled(false);
} else {
positiveButton.setEnabled(true);
}
}
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
}
@Override
public void onTextChanged( CharSequence arg0, int arg1, int arg2, int arg3) {
}
}
}
);
return dialog; //el diálogo de retorno va a dialog.show() a través de la capa exterior;
}
El código anterior se compila normalmente, pero se produce una excepción de puntero nulo cuando se ejecuta. ¿Puedes adivinar qué objeto está vacío?
Pitbull es
Último botón positivButton = ((AlertDialog)dialog).getButton(AlertDialog.BUTTON_POSITIVE);
Además, si desea determinar los caracteres de editText Si la cadena está vacía, editText.getText().toString().equal("");
De lo contrario, habrá problemas con esta sentencia.
Entonces, recuerde la conclusión:
Si desea obtener el botón en alertDialog, debe obtenerlo después de este dialog.show().
Por lo tanto, el código anterior se puede cambiar a:
private void createCustomDialog(Context dialogContext, final int position, String defaultNumber) {
Finalmente, EditText editText = new EditText(dialogContext);
Finalmente, AlertDialog.Builder = new AlertDialog.Builder.setView(editText);
Finalmente, AlertDialog.Builder = new AlertDialog.Builder.setView( editText) ;
Finalmente, AlertDialog.Builder = new AlertDialog.Builder.setView(editText)
builder.setView(editText)
builder.setTitle(); R. string.fastdialer_add_number_title);
builder.setPositiveButton(android.setNegativeButton(android.R.string.cancel, null);
Diálogo de diálogo = builder.create();
// !
botón final positivButton = ((AlertDialog)dialog).getButton(AlertDialog.BUTTON_POSITIVE);
// ¡¡¡Ahora el botón de este cuadro de diálogo ya no estará vacío !!!!
if(editText!addTextChangedListener(
new TextWatcher(){
@Override
public void afterTextChanged(Editable arg0) {
if(arg0.toString().equals("")){
positiveButton.setEnabled(false);
} else {
positiveButton.setEnabled(true);
}
}
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { }
public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {}
}
);
}
¿El código anterior es perfecto?
De hecho, hay un método de escucha dentro del cuadro de diálogo que se puede volver a llamar cuando se muestra el cuadro de diálogo
<. p>Entonces, puedes poner las cosas a hacer después de show() en el método de escucha, de la siguiente manera:Final dialog box dialog = builder.create();
dialog.setOnShowListener (nueva DialogInterface.OnShowListener()