我有什么
我有一个ListView显示设备上的文件。我有一个隐藏的ImageView,当用户点击“全选”按钮时,我想让它变为VISIBILE。
问题
当用户单击全选按钮时,不会选择所有项目。当我向下滚动时,我发现一些项目尚未被选中(图像视图仍然是不可见的)。
我的代码
selectAll.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
List<Item> selectList = dir;
for (int i = 1; i < list.getChildCount(); i++) {
tmpView = list.getChildAt(i);
select = (ImageView) tmpView.findViewById(R.id.fileSelect);
select.setVisibility(View.VISIBLE);
}
for (int i = 1; i < selectList.size(); i++) {
Item o = adapter.getItem(i);
o.setSelected();
}
}
});
请建议如何解决这个问题?我知道ListView项目被重用,这实际上导致了问题,但我不知道如何解决这个问题。
答案 0 :(得分:1)
您的方法不正确。原因ListView.getChildCount()仅返回可见列表项的数量 我建议这样干净的方法:尝试将所选属性添加到您的项目中,然后您可以通过通知数据集更改来更新您的视图。它看起来像这样:
public class Item{
boolean selected;
}
你的适配器应该是这样的:
public View getView(int position, View convertView, ViewGroup parent) {
// do something to get view
if(item.selected){
yourImageView.setVisibility(View.VISIBLE);
}else{
yourImageView.setVisibility(View.INVISIBLE);
}
}
最后,在select all按钮中单击监听器:
List<Item> yourList = getYourListData();
for (int i = 1; i < yourList.size(); i++) {
Item o = yourList.get(i);
o.selected = true;
}
// remember notify dataset changed
adapter.notifyDatasetChanged();