android imageview 回收,android-ViewHolder ImageView setVisibility重复

博客讨论了一个使用ViewHolder模式的Android适配器遇到的问题,即在ListView中,当检查数据库并根据条件显示或隐藏ImageView时,错误地显示了不在数据库中的图像。作者发现,即使数据库中没有相关数据,滚动列表时ImageView的可见性也会被错误地设置。博客内容涉及对ListView的适配器逻辑的调试和优化,以确保只有在数据匹配时才显示相应的ImageView。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我有一个带有ViewHolder模式的适配器.它具有一个TextView和一个ImageView.我必须对适配器中的数据库进行一些检查,以显示或不显示ImageView.

问题是将View.VISIBLE的可见性也设置为其他位置的ImageView.我确定我的数据库不包含那些与那些imageview相关的数据,而只包含那些正确设置的数据.

这是我的代码(我删除了textview集合的一部分,因为它运作良好):

public class ChaptersAdapter extends ArrayAdapter {

private final Context context;

private final ArrayList list;

ViewHolder viewHolder;

DatabaseHandler dh;

SQLiteDatabase db;

ArrayList bookmarksAL;

public ChaptersAdapter(Context context, ArrayList 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

if(bookmarksAL.get(i).getId_chapter().equals((String)chapters.get(3))){

viewHolder.imageView.setVisibility(View.VISIBLE);

}

}

return rowView;

}

}

这是我的意思的屏幕:

只需要添加带圆圈的imageview,而不是上面带有X的imageview.如果我向下滚动列表视图,则视图持有者会将可见性设置为对不在数据库中的其他图像视图也可见.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值