一、效果图:
二、实现方式:
思路:在item的点击事件中将所有点击过的消息id存储到一个串中用“,”隔开,在适配器中取出串再判断里面是否已经存在过当前点击过的item的id,如果存在则标记为已读。
1.MessageActivity:
关键代码:
private void initAdapter(final List<MessageBeen.BodyEntity.DataEntity> publicList) {
if(publicList==null) {
Toast.makeText(this, "暂无更多数据", Toast.LENGTH_SHORT).show();
}else {
if(mMessageAdapter==null) {
mMessageAdapter = new MessageAdapter(this, publicList);
recyclerview.setAdapter(mMessageAdapter);
mMessageAdapter.setIntemClickListener(new MessageAdapter.MyItemClickListener() {
@Override
public void onItemClick(View view, int position) {
Bundle bundle = new Bundle();
MessageBeen.BodyEntity.DataEntity dataBean= publicList.get(position);
//取出保存的已经点击了的条目集合
String alreadyLook = SPUtils.getStringType(MessageListActivity.this,Constants.MESSAGE_ALREADY_LOOKED);
//判断当前的id是否存在保存的字符串中
if (!alreadyLook.contains(dataBean.getMsgId() + "")) {//如果不存在已读的字符串中
SPUtils.putStringType(MessageListActivity.this,Constants.MESSAGE_ALREADY_LOOKED,alreadyLook+dataBean.getMsgId()+",");
//刷新适配器
mMessageAdapter.notifyDataSetChanged();
}
publicList.get(position).setReadState(true);
//第三步:根据当前类型获取URL
String url = AppConfig.BASE_HOST + "party-api/m/message/detail/" + publicList.get(position).getMsgId() + ".html";
bundle.putString(Constants.NEW_DETAIL_URL,url);
AppManager.getInstance().jumpActivity(MessageListActivity.this, MessageDetailActivity.class, bundle);
}
});
}else {
Log.e("TAG", "更新数据");
mMessageAdapter.updateDatas(publicList);
}
}
}
2.MessageAdapter:
关键代码:
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
isLoadTime= MoudleControlUtils.isNeedView(mContext,AppConfig.MODEL_NEWS_PUBLIC_TIME);
String publicTime = mNewList.get(position).getPublicTime();
String resultTime=null;
if(publicTime==null) {
publicTime="";
}else {
if (isLoadTime) {
resultTime = publicTime;
} else {
resultTime = publicTime.substring(0, 10);
}
}
holder.message_item_title.setText(mNewList.get(position).getTitle());
holder.message_item_time.setText(resultTime);
if (SPUtils.getStringType(context,Constants.MESSAGE_ALREADY_LOOKED).contains(mNewList.get(position).getMsgId() + "")) {
holder.tv_messageState.setText("已读");
holder.tv_messageState.setTextColor(Color.rgb(255, 102, 102));
holder.tv_messageState.setTextColor(context.getResources().getColor(R.color.p_204_204_204));
} else {
holder.tv_messageState.setText("未读");
holder.tv_messageState.setTextColor(Color.rgb(255, 102, 102));
}
}