代码之家  ›  专栏  ›  技术社区  ›  Demonic218

单击项目时更新RecyclerView中的ImageView

  •  1
  • Demonic218  · 技术社区  · 8 年前

    我构建了一个recyclerview,在应用程序中显示sqlite数据库中的项目。有一个带有图标的imageview,当用户单击该项目时,图标会发生变化,因为该项目现在被视为已阅读。存储这些数据的我的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(); 在那之后,但那根本不起作用,根本没有任何变化。

    我不知道还能尝试什么?

    1 回复  |  直到 8 年前
        1
  •  1
  •   Sujith Niraikulathan    8 年前

    在更改图像时添加此代码

    回复设置状态(“读取”);