2010-11-03 3 views
6

друзей,андроид один выбор выбор выбор проблема?

Я использую следующий код для отображения списка с помощью кнопок радио теперь я хочу, чтобы выбрать конкретный переключатель списка по умолчанию, поэтому используя setSelection свойство, которое не работает.

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


     } 

      } 
      ); 

, пожалуйста, руководство пользователя, какую ошибку я делаю?

ответ

6

Возможно, я полностью выключен, но думаю, что setSelection не обязательно проверяет ваш элемент (как в флажке, так и на радио), но он переходит к нему.

В качестве обходного решения (возможно, существует более элегантное решение) вы можете расширить ArrayAdapter и установить флажок вручную в методе getView().

Добавить что-то вроде этого в ваш класс:

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

} 

И изменить способ получения адаптера к new MArrayAdapter(this, items);

P.S. На мой предыдущий комментарий, моя ошибка, вам лучше позвонить setChoiceMode (это просто в моем приложении, я вызываю notifyDataSetChanged, поэтому мне это действительно не нужно). Я думаю, что ваш подход к некоторому странному поведению без режима выбора.

31

You'r ищет:

list.setItemChecked(2, true); 
+0

BINGO! Это было именно то, что мне нужно в моем случае. На самом деле, я хочу вызвать setItemChecked (чтобы проверить его) и setSelection (чтобы вывести элемент в поле зрения). –

Смежные вопросы