gpt4 book ai didi

android - Android 中的 ListView 选择问题

转载 作者:行者123 更新时间:2023-11-29 01:40:32 25 4
gpt4 key购买 nike

我有什么

我有一个 ListView 显示设备上的文件。我有一个隐藏的 ImageView,我想在用户单击“全选”按钮时使其可见。

问题

当用户点击全选按钮时,并没有选择所有项目。当我向下滚动时,我发现有些项目没有被选中( ImageView 仍然是不可见的)。

我的代码

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 项目被重用,这实际上是导致问题的原因,但我不知道如何解决这个问题。

最佳答案

您的方法不正确。因为 ListView.getChildCount() 只返回可见列表项的数量。
我建议采用这种简洁的方式:尝试将选定的属性添加到您的项目中,然后您可以通过通知数据集更改来更新您的 View 。它看起来像这样:

  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);
}
}

最后,在您的全选按钮点击监听器中:

  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();

关于android - Android 中的 ListView 选择问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24977983/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com