2011-05-04 13 views
6

Utilizo el siguiente código para crear una preferencia personalizada. El archivo de diseño xml tiene un Button, EditText y TextView. Este diseño personalizado aparece dentro de un Alert con los botones "Aceptar" y "Cancelar". Todo esto funciona bien¿Cómo crear una preferencia personalizada con un botón neutral?

me gustaría añadir un tercer botón (un botón neutro) al lado de la "Aceptar y 'Cancelar' botones. He experimentado con la clase AlertBuilder pero no puedo encontrar la manera de incorporar tanto mi diseño xml costumbre y un botón neutro.

¿Cómo puede hacerse esto?

Actualmente tienen ...

public class MelsMessage extends DialogPreference { 

    Button bMessage; 
    EditText eMessage; 
    TextView tMessage; 

    public MelsMessage(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     // TODO Auto-generated constructor stub 
    } 



    protected View onCreateDialogView() { 

     LayoutInflater layoutInflater = LayoutInflater.from(getContext()); 
     View view = layoutInflater.inflate(R.layout.dialog_pref_mess, null); 

     //UI elements 

     bMessage = (Button) view.findViewById(R.id.buttonMessage); 
     eMessage = (EditText) view.findViewById(R.id.edittextMessage); 
     tMessage = (TextView) view.findViewById(R.id.textviewMessage); 


     return view;   
    } 

} 

Respuesta

0

Cuando está sustituyendo onCreateDialogView y no establece la setPositiveButton y la setNegativeButton ok y el botón cancelar debería desaparecer, ¿no? Porque en ese método está anulando el diseño predeterminado y estableciendo uno personalizado.

Si ese es el caso, entonces debe crear su propio diseño inferior personalizado con 3 botones y agregarlo en el inflado. Intente buscar e implementar la "barra de botones inferior" que tiene toda la implementación necesaria, porque no veo en los documentos ningún método o una forma de implementar el botón neutral como en un cuadro de diálogo normal.

0

puede crear cuadros de diálogo personalizados con 3 botones o escribir código como

Dialog.setButton(AlertDialog.BUTTON_POSITIVE, "OK", new DialogInterface.OnClickListener() { 

     public void onClick(DialogInterface dialog, int id) { 



    } }); 

Dialog.setButton(AlertDialog.BUTTON_NEGATIVE, "Cancle", new DialogInterface.OnClickListener() { 

     public void onClick(DialogInterface dialog, int id) { 



    }}); 

Dialog.setButton(AlertDialog.BUTTON_NEUTRAL, "Do Nothing" new DialogInterface.OnClickListener() { 

     public void onClick(DialogInterface dialog, int id) { 


    }}); 
4

Puedo ver su pregunta es un poco viejo y tal vez usted ya tiene la respuesta a su pregunta, pero aquí es una solución para su clase que extiende DialogPreference.

En primer lugar hay que Anulación el método onPrepareDialogBuilder en su MelsMessage clase:

@Override 
protected void onPrepareDialogBuilder(AlertDialog.Builder builder) 
{ 
    super.onPrepareDialogBuilder(builder); 
    builder.setNeutralButton("hello", this); 
} 

this en el método setNeutralButton es DialogInterface.OnClickListener interfaz que implementan la claseDialogPreference.

Lo último que hay que hacer es Anulación el método onClick en su MelsMessage clase:

@Override 
public void onClick(DialogInterface dialog, int which) 
{ 
    super.onClick(dialog, which); 

    switch (which) 
    { 
     case DialogInterface.BUTTON_POSITIVE: 
      // do things for the right button 
      break; 

     case DialogInterface.BUTTON_NEGATIVE: 
      // do things for the left button 
      break; 

     default: 
      // do things for the center button 
      break; 
    } 
} 

Si desea manejar el clic en otra clase todo lo que tiene que hacer es implementar DialogInterface.OnClickListener en esta clase.

Espero que esto te ayude. Aclamaciones.

+0

Utilicé esta respuesta http://stackoverflow.com/a/20565983/1898523 para incluir la clase personalizada en XML – wrapperapps

Cuestiones relacionadas