单击项目时在RecyclerView中更新ImageView

时间:2018-06-04 06:56:55

标签: android android-recyclerview

我已经构建了一个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();,但这根本不做什么,根本没有变化。

我不确定还能尝试什么?

1 个答案:

答案 0 :(得分:1)

在更改图像时添加此代码

  

reply.setStatus( “读出”);