Android中的ListView选择问题

时间:2014-07-27 04:44:40

标签: android android-listview

我有什么

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

1 个答案:

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