我有一个ListView
,其中包含使用ImageLoader
(框架)加载的图片以及每个图片的复选框。我有一个适用于BaseAdapter
ListView
的适配器当我正在检查其中一个复选框并滚动它时,我会看到其他自动选中的复选框。有没有办法解决我的问题。请有人给我一些线索或例子。
答案 0 :(得分:1)
这是因为正在重用行,因此您需要为每一行设置一些属性,告诉它是否检查了该行。然后在getView()
中创建“if and else”语句,查看是否检查了该行,如果只是检查它,否则请将其保留为未选中状态。
答案 1 :(得分:1)
我建议你使用一系列布尔值,你可以在列表中的每个位置保持检查状态。 ListView在滚动时重新创建列表元素,因此您的检查可能会混乱。这意味着你必须检查你实例化的元素的位置的布尔值是否为真,然后使用checkBox.setChecked(true)或checkBox.setChecked(false)。
答案 2 :(得分: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;
}