Red de conocimiento informático - Material del sitio web - ¿Cómo desactivar dinámicamente botones en un cuadro de diálogo?

¿Cómo desactivar dinámicamente botones en un cuadro de diálogo?

Al escribir cuadros de diálogo, a menudo necesitamos configurar los botones del cuadro de diálogo para que estén deshabilitados bajo ciertas condiciones.

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

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()