首页 > 解决方案 > 在项目单击时更新 RecyclerView 中的 ImageView

问题描述

我已经构建了一个 recyclerview,它显示应用程序中 sqlite db 中的项目。有一个带有图标的图像视图,当用户单击该项目时,该图标会发生变化,因为该项目现在被视为已读。我存储此数据的 sqlite 表有一个具有读取状态的列,默认情况下所有内容都是未读的,当​​用户单击和项目时,该状态更改为已读。

此状态是适配器类最初知道要使用哪个图标的方式。这部分一切正常。问题是当用户单击一个项目并且图标变为新的已读图标时,它又变回原来的未读图标。

@Override
    public void onBindViewHolder(@NonNull final MyViewHolder holder, int position) {
        final Reply reply = ReplyList.get(position);
        if(reply.getStatus().equals("unread")){
            holder.status.setImageResource(R.drawable.ic_unread);
            holder.status.setColorFilter(context.getResources().getColor(R.color.red));
        } else {
            holder.status.setImageResource(R.drawable.ic_read);
            holder.status.setColorFilter(context.getResources().getColor(R.color.green));
        }
        holder.name.setText(smsReply.getName());
        holder.patientNumber.setText(smsReply.getNumber());
        holder.dateReceived.setText(smsReply.getReceivedDate());

        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(final View view) {
                DBHandler db = new DBHandler(view.getContext());
                db.changeReadStatus(smsReply.getId());
                holder.status.setImageResource(R.drawable.ic_read);
                holder.status.setColorFilter(context.getResources().getColor(R.color.green));
                notifyItemChanged(holder.getAdapterPosition());
                //notifyDataSetChanged();
}

我首先只是通过调用更改了图像

holder.status.setImageResource(R.drawable.ic_read);
                 holder.status.setColorFilter(context.getResources().getColor(R.color.green));

这一直有效,直到我滚动过去该项目,当我回到该项目时,图标已变回未读图标,我认为这是由于 recyclerview 视图的缓存性质。

然后我添加了notifyItemChanged(holder.getAdapterPosition());哪个更改了图像,然后由于某种原因它又变回了未读的图像。

之后我尝试添加notifyDataSetChanged();,但这根本没有任何作用,根本没有任何变化。

我不确定还能尝试什么?

标签: androidandroid-recyclerview

解决方案


更改图像时添加此代码

回复.setStatus(“已读”);


推荐阅读