Android复选框+ listview问题

时间:2016-01-20 12:10:16

标签: android listview button checkbox

我的listview的每个项目都包含一个复选框。

每当我点击CheckBox的一行时,我希望检查/取消选中ListView。现在,CheckBoxListView项是两个分开的东西,这意味着我可以点击ListView项目(""复选框后面)或{ {1}}。

问题在于,如果我点击CheckBox,它就不会触发 itemClickListener (这是合乎逻辑的,因为它们是分开的)。

所以我想要的是项目和复选框工作"作为一个"。

以下是我的代码的相关部分:

活动:

CheckBox

适配器:

listView.setAdapter(new FoodTypeAdapter(this, foodTypeList));
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            CheckBox cb = (CheckBox) view.findViewById(R.id.foodType);
            if (cb.isChecked()) {
                intent.putExtra("position", position);
            }
        }
    });

ListView行:

private boolean[] checkBoxState;

public FoodTypeAdapter(Context context, List<FoodType> foodTypeList) {
    this.foodTypeList = foodTypeList;
    inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    checkBoxState = new boolean[foodTypeList.size()];
}

static class ViewHolder {
    protected CheckBox foodType;
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    View newView;
    if (convertView == null) {
        newView = inflater.inflate(R.layout.food_type_row, null);
        final ViewHolder viewHolder = new ViewHolder();
        viewHolder.foodType = (CheckBox) newView.findViewById(R.id.foodType);
        newView.setTag(viewHolder);
    } else {
        newView = convertView;
    }

    final ViewHolder holder = (ViewHolder) newView.getTag();

    holder.foodType.setText(foodTypeList.get(position).getName());
    holder.foodType.setChecked(checkBoxState[position]);
    holder.foodType.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            if (((CheckBox) v).isChecked()) {
                checkBoxState[position] = true;
            } else {
                checkBoxState[position] = false;
            }
        }
    });

    return newView;
}

我知道很多关于此的话题已经存在,但我还没有找到一个有同样问题的话......

请帮帮我!

2 个答案:

答案 0 :(得分:1)

我认为您应该通过在xml中设置CheckBox来使android:clickable="false"无法点击。然后,当用户点击项目并OnItemClickListener触发时,您应该手动切换CheckBox的状态。

答案 1 :(得分:-1)

我认为你应该只在 newView 上应用 onclicklistener ,当点击视图时你将激活它,然后你可以根据它的位置切换复选框。