安卓单选列表选择问题?

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


       }

            }
            );

请指导我犯了什么错误?

2个回答

32

您正在寻找:

list.setItemChecked(2, true);

BINGO!这正是我在这种情况下所需要的。事实上,我想同时调用setItemChecked(以选中它)和setSelection(以将项目带入视图)。 - Joe D'Andrea

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,所以我不真正需要它)。我认为如果没有选择模式,您会遇到一些奇怪的行为。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接