2010-11-03 17 views
6

amici,problema selezione selezione Android scelta singola?

sto usando seguente codice per visualizzare l'elenco con i pulsanti di opzione ora voglio per selezionare specifiche pulsante di lista di default in modo da utilizzare proprietà setSelection che non funziona.

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


     } 

      } 
      ); 

per favore, guida che errore sto facendo?

risposta

6

Potrei essere completamente fuori, ma penso che setSelection non controlli necessariamente il tuo oggetto (come nella casella di controllo, o radio), naviga verso di esso però.

Come soluzione alternativa (forse esiste una soluzione più elegante) è possibile estendere ArrayAdapter e impostare il controllo manuale in un metodo getView().

aggiungere qualcosa di simile alla 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; 
    } 

} 

e cambiare il tuo modo di ottenere un adattatore per new MArrayAdapter(this, items);

P.S. Sul mio precedente commento, mio ​​errore, è meglio chiamare setChoiceMode (è solo nella mia app, chiamo notifyDataSetChanged, quindi non ne ho davvero bisogno). Penso che tu abbia un comportamento strano senza la modalità scelta.

31

You'r alla ricerca di:

list.setItemChecked(2, true); 
+0

BINGO! Era esattamente ciò di cui avevo bisogno nel mio caso. In effetti, voglio chiamare sia setItemChecked (per controllarlo) che setSelection (per visualizzare l'elemento). –