我有一个ListView
通过使用(框架)加载的图像和每个图像的复选框。我有一个为此ImageLoader
扩展的适配器,当我选中一个复选框并滚动它时,我会看到自动选中的其他复选框. 有什么办法可以解决我的问题。请有人给我一个线索或例子。BaseAdapter
ListView
问问题
111 次
3 回答
1
这是因为这些行正在被重复使用,因此您需要为每一行设置一些属性,告诉它是否检查了该行。然后在你的“if and else”语句中getView()
查看该行是否被选中,如果它只是检查它,否则不选中它。
于 2012-10-04T12:10:30.403 回答
1
我建议您使用一个布尔数组,在其中为列表中的每个位置保持选中状态。ListView 在滚动时重新创建列表元素,因此您的检查可能会搞砸。这意味着您必须检查要实例化的元素位置的布尔值是否为真,然后使用 checkBox.setChecked(true) 或 checkBox.setChecked(false)。
于 2012-10-04T12:43:18.197 回答
0
简单的,
Set<String> bs = new HashSet(String);
String[] bid;
并将这个写在你的getView方法中,作为模板。不作为解决方案
public View getView(final int position, View convertView, ViewGroup arg2) {
row = convertView;
if (row == null)
{
LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = vi.inflate(R.layout.your_listview,null);
}
check = (CheckBox) row.findViewById(R.id.your_checkboxid);
check.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked)
{
bs.add(bid[position]);
}
else
{
if(bs.contains(bid[position]))
{
bs.remove(bid[position]);
}
}
}
});
if(bs.contains(bid[position]))
{
check.setChecked(true);
}
else
{
check.setChecked(false);
}
return row;
}
于 2012-10-04T13:06:01.433 回答