[英]ListView with CheckBoxes and a click listener
我想为使用自定义适配器的 ListView 的 CheckBoxes 实现单击侦听器。 像这样:
我知道choiceMode的存在,但我想自己实现。
我正在尝试应用良好的做法。 这是我的适配器的样子:
public class TaskListAdapter extends ArrayAdapter<ListTask> {
private ArrayList<ListTask> mItems;
private ArrayList<Boolean> mChecked;
private LayoutInflater mInflater;
public TaskListAdapter(Context context, int textViewResourceId, ArrayList<ListTask> items) {
super(context, textViewResourceId, items);
this.mItems = items;
// Cache the LayoutInflate to avoid asking for a new one each time
mInflater = LayoutInflater.from(context);
// Initialize all checkboxes with false value
mChecked = new ArrayList<Boolean>();
for (int i = 0; i < this.getCount(); i++) {
mChecked.add(i, false);
}
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.list_row, null);
holder = new ViewHolder();
holder.checkbox = (CheckBox) convertView.findViewById(R.id.mycheckbox);
holder.text = (TextView) convertView.findViewById(R.id.mytext);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
MyList mylist = mItems.get(position);
holder.text.setText(mylist.getMyText());
// Create a listener for the CheckBox
holder.checkbox.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (holder.checkbox.isChecked()) {
mChecked.set(position, true);
} else {
mChecked.set(position, false);
}
}
});
holder.checkbox.setChecked(mChecked.get(position));
return convertView;
}
static class ViewHolder {
CheckBox checkbox;
TextView text;
}
}
当我运行我的应用程序时,我收到此错误:
java.lang.IndexOutOfBoundsException:位置 0 无效,大小为 0
该错误是由该行引发的
holder.checkbox.setChecked(mChecked.get(position));
那是在 return 语句之前。
如果我评论它并重新运行应用程序,它会显示列表,但是当我点击一个复选框时,它也会为这一行抛出一个 IndexOutOfBoundsException:
mChecked.set(position, true);
那是在检查复选框是否被选中的“if”语句中。
我究竟做错了什么?
你检查position的值了吗? 您是否还确保定位正确的视图,甚至填充您的列表? 您可能没有填充您的 ListView。 据我所知,当涉及到 ListView 和 CheckBoxes 时,position 并不是我感兴趣的变量。
而不是像这样
for (int i = 0; i < this.getCount(); i++) { mChecked.add(i, false); }
试试看
for (int i = 0; i < mItems.size(); i++) { mChecked.add(i, false); }
我认为您提交给构造函数的ArrayList<ListTask>
可能是 null,请检查一次。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.