9
votes

Utilisation de ListPreference et obtenez la clé fonctionne mais pas de bouton OK

J'utilise listpreference dans mon application Android et que vous obtenez mes valeurs clés et tout va bien et que vous travaillez bien (maintenant que vous m'avez aidé) mais - lorsque mon groupe de menus ListPréférence ne contient que un bouton d'annulation.

Disons que l'utilisateur choisit entre rouge, bleu et vert. Lorsque la boîte de dialogue LISTPRREFERENCED est d'abord abordée, la boîte de dialogue indique uniquement un bouton Annuler. Pour cette raison, la boîte de dialogue disparaît dès que l'utilisateur sélectionne leur choix. J'aimerais que, lorsque l'utilisateur choisit son réglage, ils voient que le bouton radio est mis en surbrillance, puis sur le bouton OK et clique sur le bouton OK ... mais je n'ai pas de bouton OK et ne peut pas comprendre pourquoi. Toute aide serait géniale ... al


0 commentaires

4 Réponses :


6
votes

Vous pouvez cloner et réimplément listpreference pour fonctionner comme vous le souhaitez, créant votre propre préférence de préférence en conséquence.

Cependant, listpreference < / code> est configuré pour simplement utiliser un bouton négatif ("Annuler"). Comme indique le code source: xxx


0 commentaires

6
votes

J'ai fait ce que la réponse précédente a suggéré et mis en œuvre ma propre liste de liste de liste basée sur le code source Android. Vous trouverez ci-dessous mon implémentation qui ajoute le bouton OK.

myPreferenCelist.java xxx

alors vous pouvez utiliser la classe dans votre préférence.xml comme suit: < Pré> xxx


1 commentaires

Pour être plus spécifique: implémente dialoginterface.onclicklistener



4
votes

Le code par Techi50 est correct, mais ne fonctionne pas pour "Bouton Annuler". Voici quelques modifications:

protected void onPrepareDialogBuilder(Builder builder) {
    super.onPrepareDialogBuilder(builder);

     prevDialogEntryIndex = getValueIndex();       // add this
     mClickedDialogEntryIndex = getValueIndex();
     builder.setSingleChoiceItems(this.getEntries(), mClickedDialogEntryIndex, new DialogInterface.OnClickListener() {
     public void onClick(DialogInterface dialog, int which) {
            mClickedDialogEntryIndex = which;

        }
    });

    builder.setPositiveButton("OK", this);
}

public  void onClick (DialogInterface dialog, int which)
{
// when u click Cancel: which = -2; 
// when u click     OK: which = -1; 

    if(which == -2){
      this.setValue(this.getEntryValues()[prevDialogEntryIndex]+"");
    }
    else {
      this.setValue(this.getEntryValues()[mClickedDialogEntryIndex]+"");
    }
}


0 commentaires

1
votes

La solution proposée par Techi50 et Ajinkya fonctionne bien. Toutefois, si vous avez aussi l'ONPRÉFERENCECHANGENERNER, cela ne tire pas.

 public  void onClick (DialogInterface dialog, int which) {
        if(which == -2) {
            this.setValue(this.getEntryValues()[mClickedDialogEntryIndexPrev]+"");
        }
        else {
            String value = this.getEntryValues()[mClickedDialogEntryIndex] + "";
            this.setValue(value);
            callChangeListener(value);
        }
    }


0 commentaires