2010-11-03 12 views
6

amigos,android problema de selección de lista de selección única?

Estoy utilizando el código siguiente a la lista con los botones de radio mostrar ahora deseo seleccionar el botón de radio específico de la lista de forma predeterminada para utilizar los bienes setSelection que no funciona.

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


     } 

      } 
      ); 

por favor guía qué error estoy haciendo?

Respuesta

6

Podría estar completamente apagado, pero creo que setSelection no necesariamente verifica su elemento (como en la casilla de verificación, o la radio), sin embargo, navega hacia él.

Como solución temporal (tal vez hay una solución más elegante) puede extender ArrayAdapter y establecerlo manualmente en un método getView().

Añadir algo como esto a su clase:

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

} 

y cambiar su manera de conseguir un adaptador para new MArrayAdapter(this, items);

P. S. En mi comentario anterior, mi error, es mejor que llame a setChoiceMode (está solo en mi aplicación, llamo notifyDataSetChanged, así que realmente no lo necesito). Creo que tienes un comportamiento extraño sin modo de elección.

31

su mirada para:

list.setItemChecked(2, true); 
+0

BINGO! Eso era exactamente lo que necesitaba en mi caso. De hecho, deseo llamar tanto a setItemChecked (para verificarlo) como a setSelection (para poner el elemento en la vista). –

Cuestiones relacionadas