Android中的列表视图选择问题

Android中的列表视图选择问题,android,android-listview,Android,Android Listview,我拥有的 selectAll.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { List<Item> selectList = dir; for (int i = 1; i < list.getChildCount(); i++) {

我拥有的

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();
                }
            }
        });
我有一个显示设备上文件的列表视图。我有一个隐藏的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();
                }
            }
        });
当用户单击“全选”按钮时,不会选择所有项目。当我向下滚动时,我发现一些项目还没有被选中(那里的图像视图仍然不可见)

我的代码

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();
                }
            }
        });
selectAll.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
List selectList=dir;
对于(int i=1;i

请建议如何解决这个问题?我知道ListView项被重用,这实际上是造成问题的原因,但我不知道如何解决这个问题。

您的方法不正确。原因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);
     }
 }
您的适配器应该是这样的:

  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();
List yourList=getYourListData();
对于(int i=1;i
您可以发布您的适配器代码吗?尝试使用标志,当选择所有按钮时,单击“使标志为真”,并通知您的列表尝试在适配器中基于此标志显示列表上的图像。Aritra@Haresh是对的,您需要在适配器类的getView方法中处理该问题,如果您有问题,请发布该代码谢谢,这是一个很好的解决方案。我的代码现在运行良好。