Android列表视图滚动复选框状态

时间:2013-07-20 09:57:53

标签: android android-listview

我有一个包含大约10个列表项的ListView。在每个列表项中,我有一个复选框。我一次只想选中一个复选框。

如果我选择第1行,则应取消选中所有剩余的9个复选框,依此类推。

请建议我一个解决方案。

目前,当滚动列表

时,我正在努力解决这个问题

2 个答案:

答案 0 :(得分:1)

您应该做的是跟踪上次检查的项目,以及ListView的{​​{1}},onItemClickListener当前项目和setChecked(true);最后一项;像这样的东西:

setChecked(false);

答案 1 :(得分:0)

private Map<String, Boolean> checkState;

public CustomAdapter(Context context) {
    this.checkState = new ArrayList<Boolean>(group_list.length);
}

@Override
public View getView(final int position, View convertView, ViewGroup viewGroup) {

    final ViewHolder holder = new ViewHolder();
    LayoutInflater inflater = (LayoutInflater)this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    convertView = inflater.inflate(R.layout.row_check_box, null);
    holder.checkbox = (Button)convertView.findViewById(R.id.checkbox);
    if(checkState.containsKey(String.valueOf(position))) {
                holder.checkbox.setBackgroundResource(R.drawable.fill_check_button);
        holder.checkbox.setTag("0");
    }else{
                holder.checkbox.setBackgroundResource(R.drawable.unfill_check_button);
        holder.checkbox.setTag("1");
    }

holder.checkbox.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                if(holder.checkbox.getTag().toString().equals("0")) {
                    holder.checkbox.setTag("1");
                    holder.checkbox.setBackgroundResource(R.drawable.fill_check_button);
                    checkState.put(String.valueOf(position), true);
} else {
                    holder.checkbox.setTag("0");
                    holder.checkbox.setBackgroundResource(R.drawable.un_fill_check_button);
                    checkState.put(String.valueOf(position), false);
                }
            }
        });
}