2010-11-03 5 views
6

amis,android unique choix de sélection de liste de choix?

je suis en utilisant le code ci-dessous pour afficher la liste des boutons radio maintenant je veux sélectionner le bouton radio spécifique de la liste par défaut afin d'utiliser les biens de setSelection qui ne fonctionne pas.

final String [] items=new String[]{"Item1","Item2","Item3","Item4"}; 
      ArrayAdapter<string> ad=new ArrayAdapter<string>(this,android.R.layout.simple_list_item_single_choice,items); 
      list=(ListView)findViewById(R.id.List); 
      list.setAdapter(ad); 

list.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 
list.setSelection(2); 
    list.setOnItemClickListener(new OnItemClickListener() 
      { 

     public void onItemClick(AdapterView arg0, View arg1, int arg2, 
     long arg3) { 
     // TODO Auto-generated method stub 
     TextView txt=(TextView)findViewById(R.id.txt); 
     txt.setText(list.getItemAtPosition(arg2).toString()); 


     } 

      } 
      ); 

veuillez guider quelle erreur je fais?

Répondre

6

Je suis peut-être complètement éteint, mais je pense que setSelection ne vérifie pas forcément votre article (comme dans la case à cocher, ou la radio), il navigue cependant. Pour contourner le problème (il existe peut-être une solution plus élégante), vous pouvez étendre ArrayAdapter et le définir manuellement dans une méthode getView().

Ajouter quelque chose comme ceci à votre classe:

private static class MArrayAdapter extends ArrayAdapter<String> { 
    public Adapter(final Context context, final String[] objects) { 
     super(context, android.R.layout.simple_list_item_single_choice, objects); 
    } 

    @Override 
    public View getView(final int position, final View convertView, final ViewGroup parent) { 
     final CheckedTextView view = (CheckedTextView) super.getView(position, convertView, parent); 
     view.setChecked(position == 2); 
     return view; 
    } 

} 

Et changer votre façon d'obtenir un adaptateur pour new MArrayAdapter(this, items);

post-scriptum Sur mon précédent commentaire, mon erreur, vous devriez appeler setChoiceMode (c'est juste dans mon application, j'appelle notifyDataSetChanged, donc je n'en ai pas vraiment besoin). Je pense que vous êtes à un comportement bizarre sans mode de choix.

31

You'r recherche:

list.setItemChecked(2, true); 
+0

BINGO! C'était exactement ce dont j'avais besoin dans mon cas. En fait, je veux appeler setItemChecked (pour le vérifier) ​​et setSelection (pour afficher l'élément). –

Questions connexes