Android本地實現已讀未讀功能
阿新 • • 發佈:2019-02-13
一、效果圖:
二、實現方式:
思路:在item的點選事件中將所有點選過的訊息id儲存到一個串中用“,”隔開,在介面卡中取出串再判斷裡面是否已經存在過當前點選過的item的id,如果存在則標記為已讀。
1.MessageActivity:
關鍵程式碼:
2.MessageAdapter: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); } } }
關鍵程式碼:
@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)); } }