【发布时间】:2014-06-24 13:33:05
【问题描述】:
嘿!
我有一个带有文本视图和复选框的列表视图,我正在尝试将选中复选框的元素添加到数据库中。
问题是当我检查界面上的一个元素是否正确显示但在数据库中插入了另一个元素(通常是列表中第一个元素中的一个)。
我不知道为什么会这样,你能帮帮我吗?
这是我的 ArrayAdapter 中的一些代码,其中显示了列表并将元素插入到数据库中。
public View getView(final int position, View convertView, ViewGroup parent) {
final Databases db = new Databases(context);
View view = null;
if (convertView == null) {
LayoutInflater inflator = context.getLayoutInflater();
view = inflator.inflate(R.layout.rowbuttonlayout, null);
final ViewHolder viewHolder = new ViewHolder();
viewHolder.text = (TextView) view.findViewById(R.id.label);
viewHolder.checkbox = (CheckBox) view.findViewById(R.id.check);
viewHolder.checkbox
.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
Model element = (Model) viewHolder.checkbox
.getTag();
element.setSelected(buttonView.isChecked());
db.open();
if(element.isSelected()){
Log.v("Databases", "Insert in DB " + list.get(position).getName());
db.createEntryTable3(element.getName(), "2", "1");
}
db.close();
}
});
view.setTag(viewHolder);
viewHolder.checkbox.setTag(list.get(position));
} else {
view = convertView;
((ViewHolder) view.getTag()).checkbox.setTag(list.get(position));
}
ViewHolder holder = (ViewHolder) view.getTag();
holder.text.setText(list.get(position).getName());
holder.checkbox.setChecked(list.get(position).isSelected());
return view;
}
【问题讨论】:
-
将 onCheckedChangeListener 移到 if(convertView == null){ .. }
-
避免在复选框中使用支架。