setItemChecked在列表视图中不起作用?

时间:2014-07-17 09:47:31

标签: 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);

  drawer.setOnItemClickListener(listItemClickListener);

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

3 个答案:

答案 0 :(得分:2)

 drawer.setChoiceMode(ListView.CHOICE_MODE_SINGLE);  

在为listview执行findviewbyid之后执行此操作,并在setonclicklistner中单击您的复选框,并且还可以使用checkedchangelistener 在里面做这个

   listOfSavedItems.setItemChecked(i, ((CheckBox) v).isChecked());

您可以使用SparseBooleanArray查看是否设置了

  SparseBooleanArray sbA=listview.getCheckedItemPositions();

并使用setTaggetTag获取所有复选框的位置,并根据位置选中或取消选中复选框

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

        }
    }

答案 1 :(得分:0)

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

drawer.setItemsCanFocus(false);

另外,请确保列表项目内的项目设置为focusable false

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

答案 2 :(得分:0)

我使用了带有复选框和名称的自定义适配器作为单独的实体,这些实体位于我使用OnCheckedChangeListener的tabitems上,这是一个漫长的过程,但对我有效。

@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....

喝彩!..