2010-11-03 14 views
6

arkadaşlar, şimdi ben çok çalışmıyor setSelection özelliğini kullanarak varsayılan olarak listenin belirli radyo düğmesini seçin istiyorum.android tek seçim listesi seçimi sorunu? i radyo düğmeleri ile listesini görüntülemek için aşağıdaki kodu kullanıyorum</p> <p>

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


     } 

      } 
      ); 

Lütfen ne yaptığımı araştırıyorum?

cevap

6

Tamamen kapalı olabilir, ama ben bu olsa ona gider setSelection necessarely değil (onay kutusu veya radyo gibi) öğesini denetler düşünüyorum.

Çözüm olarak

Eğer ArrayAdapter uzatabilirsiniz ve seti GetView() yönteminde elle kontrol (belki daha zarif bir çözüm yoktur).

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

} 

Ve new MArrayAdapter(this, items);

P.S. için bir adaptöre alma biçimini değiştirmek:

sınıflarına gibi bir ekleme benim önceki yorum, benim hata üzerinde , daha iyi (ben notifyDataSetChanged diyoruz, sadece benim app, bu yüzden gerçekten buna ihtiyacım yok) setChoiceMode diyoruz. Seçim tarzınız olmadan bazı garip davranışlara sahip olduğunuzu düşünüyorum.

31

you'r arayan:

list.setItemChecked(2, true); 
+0

BINGO! Benim durumumda ihtiyacım olan şey buydu. Aslında, (bunu kontrol etmek) hem setItemChecked aramak ve setSelection (görünüme öğeyi getirmek) istiyorum. –

İlgili konular