Android setItemChecked在列表视图中不工作?

Android setItemChecked在列表视图中不工作?,android,listview,android-arrayadapter,Android,Listview,Android Arrayadapter,下面是我为列表设置适配器的代码 ListView drawer; ArrayAdapter<String> adapter=new ArrayAdapter<String>(getBaseContext(), R.layout.drawer_item, list); drawer.setAdapter(adapter); // drawer.setChoiceMode(ListView.CHOICE_MODE_SINGLE);

下面是我为列表设置适配器的代码

  ListView drawer;

 ArrayAdapter<String> adapter=new ArrayAdapter<String>(getBaseContext(),             R.layout.drawer_item, list);
  drawer.setAdapter(adapter);
 // drawer.setChoiceMode(ListView.CHOICE_MODE_SINGLE);

  drawer.setOnItemClickListener(listItemClickListener);
ListView抽屉;
ArrayAdapter=新的ArrayAdapter(getBaseContext(),R.layout.drawer\u项,列表);
抽屉.设置适配器(适配器);
//drawer.setChoiceMode(ListView.CHOICE\u MODE\u SINGLE);
drawer.setOnItemClickListener(listItemClickListener);

我添加了
drawer.setItemChecked(pos,true)
onItemClickListener
中。但它不起作用。

尝试将列表视图中的所有项目设置为不可聚焦

drawer.setItemsCanFocus(false);
另外,确保列表项集中的项设置为focusable false

android:focusable="false"      
android:focusableInTouchMode="false"

我使用自定义适配器,将复选框和名称作为单独的实体,这些实体位于我使用的选项卡Items上,这是一个漫长的过程,但对我来说很有效

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    final ViewHolder viewHolder;
    if (convertView == null) {
        viewHolder = new ViewHolder();
        LayoutInflater inflator = reportViewContext.getLayoutInflater();
        convertView = inflator.inflate(R.layout.tabitems, null);            
        viewHolder.name= (TextView) convertView
                .findViewById(R.id.name);
        viewHolder.address= (TextView) convertView
                .findViewById(R.id.adress);
        viewHolder.checkbox = (CheckBox) convertView
                .findViewById(R.id.checkbox);
        viewHolder.checkbox
                .setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                    @Override
                    public void onCheckedChanged(CompoundButton buttonView,
                            boolean isChecked) {

                        UserModel element = (UserModel) viewHolder.checkbox
                                .getTag();
                        element.setChecked(buttonView.isChecked());
                        UserModel model= data.get(position);
                        model.setChecked(buttonView.isChecked());

                    }
                });
            viewHolder.checkbox.setTag(data.get(position));
        convertView.setTag(viewHolder);
    } else {
        viewHolder = (ViewHolder)convertView.getTag();
        ((ViewHolder) convertView.getTag()).checkbox.setTag(data.get(position));
    }
      //remaining data operation tasks....
干杯

 drawer.setChoiceMode(ListView.CHOICE_MODE_SINGLE);  
在为listview执行findviewbyid之后,以及在
setonclicklistner
中单击复选框时执行此操作,您还可以使用
checkedchangelistener
在里面做这个

   listOfSavedItems.setItemChecked(i, ((CheckBox) v).isChecked());
您可以使用
SparseBooleanArray
查看它是否已设置

  SparseBooleanArray sbA=listview.getCheckedItemPositions();
使用
setTag
getTag
获取所有复选框的位置,并根据位置选中或取消选中复选框

    for (int i = 0; i <=positionsSparseArray.size(); i++) {
        int pos = (int) viewHolder.checkBox.getTag();
        if (i == pos) {
            viewHolder.checkBox.setChecked(positionsSparseArray.get(i));

        }
    }

for(int i=0;我检查了一下,它可能会对您有所帮助。我已经尝试过这些方法,但仍然不适用于我。