我已经构建了一个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();
,但这根本不做什么,根本没有变化。
我不确定还能尝试什么?
答案 0 :(得分:1)
在更改图像时添加此代码
reply.setStatus( “读出”);