ViewHolder ImageView setVisibility 重复

ViewHolder ImageView setVisibility is repeated

我有一个带有 ViewHolder 模式的适配器。它有一个 TextView 和一个 ImageView。我必须对适配器中的数据库进行一些检查以显示 ImageView 或不显示。 问题是将可见性设置为 View.VISIBLE 也设置为其他位置的其他 ImageView。我确定我的数据库不包含与那些图像视图相关的数据,而只包含正确设置的数据。

这是我的代码(我删除了文本视图集的一部分,因为它运行良好):

public class ChaptersAdapter extends ArrayAdapter<List> {
    private final Context context;
    private final ArrayList<List> list;
    ViewHolder viewHolder;
    DatabaseHandler dh;
    SQLiteDatabase db;
    ArrayList<BookmarksHandler> bookmarksAL;

    public ChaptersAdapter(Context context, ArrayList<List> list) {
        super(context, R.layout.chaptersadapter, list);

        this.context = context;
        this.list = list;
    }

    static class ViewHolder{
        TextView titolo;
        ImageView imageView;
    }

    @Override
    public View getView(int position, View rowView, ViewGroup parent) {
        dh = new DatabaseHandler(context);
        db = dh.getWritableDatabase();
        bookmarksAL = dh.getAllBookmarks(db);

        List chapters = getItem(position);

        if(rowView==null){
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            rowView = inflater.inflate(R.layout.chaptersadapter, parent, false);

            viewHolder = new ViewHolder();

            viewHolder.titolo = (TextView) rowView.findViewById(R.id.textView);
            viewHolder.imageView = (ImageView) rowView.findViewById(R.id.imageView);

            rowView.setTag(viewHolder);
        }
        else {
            viewHolder = (ViewHolder) rowView.getTag();
        }

        for(int i = 0; i<bookmarksAL.size(); i++){
            if(bookmarksAL.get(i).getId_chapter().equals((String)chapters.get(3))){
                viewHolder.imageView.setVisibility(View.VISIBLE);
            }
        }


        return rowView;
    }
}

这是我的意思的屏幕截图:

只需要添加带圆圈的imageview,不需要添加上面带X的。如果我向下滚动列表视图,查看器将可见性设置为对不在我的数据库中的其他图像视图也可见。

由于其回收机制,这是 ListView 的正常行为。如果不满足条件

,则重置 ImageView 的可见性
for(int i = 0; i<bookmarksAL.size(); i++){            
  if(bookmarksAL.get(i).getId_chapter().equals((String)chapters.get(3)))  {            
      viewHolder.imageView.setVisibility(View.VISIBLE);
      break;
  } else {
      viewHolder.imageView.setVisibility(View.GONE);
  }
}

对于其他不可见的项目,您还需要设置如下:

  for(int i = 0; i<bookmarksAL.size(); i++){
        if(bookmarksAL.get(i).getId_chapter().equals((String)chapters.get(3))){
            viewHolder.imageView.setVisibility(View.VISIBLE);
        }
        else
            viewHolder.imageView.setVisibility(View.INVISIBLE);
    }

最好设置INVISIBLE因为GONE会改变你的布局

希望对您有所帮助!