我构建了一个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();
在那之后,但那根本不起作用,根本没有任何变化。
我不知道还能尝试什么?