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));
        }
    }


  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
Android系统提供了一个名为 "Gallery" 的应用程序,它可以允许用户在本地相册中选择多个图片,并将这些图片传递给应用程序。但是,由于 "Gallery" 应用程序已经被弃用,我们可以使用其他第三方库来实现类似的效果。 以下是一个使用 "Glide" 和 "PhotoPicker" 库来实现本地相册墙多选功能的示例代码: 1. 在 build.gradle 文件中添加 "Glide" 和 "PhotoPicker" 库的依赖: ``` dependencies { implementation 'com.github.bumptech.glide:glide:4.12.0' implementation 'me.iwf.photopicker:PhotoPicker:0.9.12@aar' } ``` 2. 在 AndroidManifest.xml 文件中添加读取本地相册的权限: ``` <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> ``` 3. 在 Java 代码中调用 "PhotoPicker" 库来选择多个图片: ``` PhotoPicker.builder() .setPhotoCount(9) // 设置最多选择的图片数量 .setShowCamera(true) // 显示相机按钮 .setShowGif(true) // 显示 GIF 图片 .setPreviewEnabled(false) // 不显示预览界面 .start(context, PhotoPicker.REQUEST_CODE); ``` 4. 在 onActivityResult 方法中获取选择的图片列表: ``` @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK && requestCode == PhotoPicker.REQUEST_CODE) { List<String> photos = null; if (data != null) { photos = data.getStringArrayListExtra(PhotoPicker.KEY_SELECTED_PHOTOS); } // 在这里对选择的图片进行处理 } } ``` 5. 如果需要显示选择的图片,可以使用 "Glide" 库来加载和显示图片: ``` Glide.with(context) .load(photoPath) // 图片路径 .into(imageView); // 图片显示控件 ``` 希望这个示例代码能够帮助你实现本地相册墙多选功能

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值