Android本地实现已读未读功能

一、效果图:



二、实现方式:

思路:在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));
        }
    }


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值