【发布时间】:2013-09-14 14:20:10
【问题描述】:
我无法找出在列表视图中存储和显示复选框的最佳方式。
现在我在 getView 方法中有代码:
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View view = convertView;
//final ViewHolder holder;
if (convertView == null) {
convertView = getActivity().getLayoutInflater().inflate(R.layout.grid_item, null);
}
ImageView img = (ImageView) convertView.findViewById(R.id.grid_item_img);
cb = (CheckBox) convertView.findViewById(R.id.chk_box_griditem);
if(photos.get(position).getIshidden()){
cb.setChecked(false);
}else{
cb.setChecked(true);
}
cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
MySQLiteHelper db = MySQLiteHelper.getInstance(getActivity());
Log.d("checkbox", "status: " + photos.get(position).getIshidden());
if (isChecked) {
photos.get(position).setIshidden(true);
cb.setChecked(true);
Log.d("checkbox", "isChecked");
db.updatePhoto(photos.get(position));
} else {
photos.get(position).setIshidden(false);
cb.setChecked(false);
Log.d("checkbox", "isCheckedelse");
db.updatePhoto(photos.get(position));
}
}
});
imageLoader.displayImage(imgUrls[position], img, options, animateFirstListener);
//img.setImageResource(mImgRes);
return convertView;
}
db 助手将照片对象作为参数并更新该行(如果存在)。所以现在我将当前的照片对象 isHidden() 更新为 true 或 false,然后将更新的对象传递给 db helper。
物理数据库似乎正在正确更新。但是,在设置复选框状态时会出现问题。复选框似乎被随机设置为选中或未选中。
我也觉得在 getView 中这样做是 cpu 贪婪的,但我不知道该怎么做。
【问题讨论】:
-
您不必在每次调用 getView 时都设置 OnCheckedChangeListener。每个复选框一个就足够了。 -> 我明白了,你需要一个新的监听器,因为你引用了监听器中的位置。
-
这个
getView方法属于哪个类?到适配器?很高兴知道您的目标是什么。photos对象是什么? -
它来自自定义列表视图适配器
private class GridAdapter extends BaseAdapter -
好的,嗯……为什么要在监听器中设置复选框?
cb.setChecked(true);已经设置好了,还是我错过了什么?
标签: android sqlite listview checkbox android-fragments