2011-05-04 2 views
6

J'utilise le code ci-dessous pour créer une préférence personnalisée. Le fichier de format XML a un Button, EditText et TextView. Cette disposition personnalisée apparaît à l'intérieur d'un Alert avec les boutons "OK" et "Annuler". Tout cela fonctionne bien. Je voudrais ajouter un troisième bouton (un bouton neutre) à côté des boutons "OK" et "Annuler" J'ai expérimenté la classe AlertBuilder mais je n'arrive pas à comprendre comment incorporer ma mise en page xml personnalisée et un bouton neutre.Comment créer une préférence personnalisée avec un bouton neutre?

Comment cela peut-il être fait?

Actuellement ont ...

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;   
    } 

} 

Répondre

0

Lorsque vous surchargez onCreateDialogView et vous ne définissez pas le setPositiveButton et setNegativeButton la ok et annuler le bouton devrait disparaître, n'est-ce pas? Parce que dans cette méthode, vous remplacez la mise en page par défaut et définissez une mise en page personnalisée.

Si tel est le cas, vous devez créer votre propre mise en page personnalisée avec 3 boutons et l'ajouter dans la disposition gonflée. Essayez de rechercher et d'implémenter le "ButtonBar du bas" qui a toutes les implémentations nécessaires, car je ne vois pas dans les docs une méthode ou un moyen d'implémenter le bouton neutre comme sur une boîte de dialogue normale.

0

vous pouvez créer de dialogue personnalisées avec 3 boutons ou écrire du code comme

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

Je vois votre question est un peu vieux et peut-être que vous avez déjà la réponse à votre question, mais voici une solution pour votre classe étend DialogPreference.

D'abord, vous devez Override la méthode onPrepareDialogBuilder dans votre MelsMessage Classe:

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

this dans la méthode setNeutralButton est l'interface DialogInterface.OnClickListener que la DialogPreference classe implémente.

La dernière chose que vous devez faire est de Override la méthode onClick dans votre MelsMessage Classe:

@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 vous voulez gérer le clic dans une autre classe tout ce que vous avez à faire est de implémenter DialogInterface.OnClickListener dans cette classe.

J'espère que cela vous aidera. À votre santé.

+0

J'ai utilisé cette réponse http://stackoverflow.com/a/20565983/1898523 pour inclure la classe personnalisée dans XML – wrapperapps

Questions connexes