朋友们,
我正在使用以下代码显示带有单选按钮的列表
现在我想默认选择列表的特定单选按钮,所以使用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()); } } );
请指导我在做什么错误?
解决方法
我可能完全关闭了,但我认为setSelection不必检查你的项目(如复选框或无线电),但它会导航到它.
作为一种解决方法(可能有一个更优雅的解决方案),您可以扩展ArrayAdapter并在getView()方法中手动设置检查.
private static class MArrayAdapter extends ArrayAdapter<String> { public Adapter(final Context context,final String[] objects) { super(context,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; } }
并改变你的适配器到新的MArrayAdapter(这,项目)的方式;
附:在我之前的评论中,我的错误,你最好调用setChoiceMode(它只是在我的应用程序中,我调用notifyDataSetChanged,所以我真的不需要它).我认为你没有选择模式会有一些奇怪的行为.