Android简单的两级评论功能实现

Android简单的两级评论功能实现

前言

在App开发过程中,做了文章页面,那评论的功能自然是必不可少的,怎么做呢,如果只是做一个简单的评论不带回复功能的话,那和之前做毕设时候的我也看不到进步呀,这怎么行呢?于是我打开'稀土掘金'App,随便看了几个文章,试了试评论的功能,于是便开始了我的构思。我想要实现的效果如下图所示,如何实现这样一个页面呢?我使用的方法是RecyclerView中再嵌套一个RecyclerView,一个用来展示一级评论,另一个则用来展示相应的二级评论,思路有了,下面就开始我的实现。

一、数据库

1、构建数据库

要想做好一个功能,数据库的构建是重中之重。下图是我构造的评论实体类

评论表中包含如下字段:

  • id --评论主键(自动生成)
  • newsId -- 主键
  • number -- 评论的用户主键
  • content -- 评论内容
  • time -- 评论时间
  • level -- 评论级别(有两级,当评论的对象是文章作者时,level为1,当评论对象为文章内的评论时,level为2,默认level为1)
  • replyNumber -- 评论回复的用户主键
  • replyId -- 评论回复的评论主键(只有level为2的评论才会用到该字段,所以默认为空)

replyNumber其实这里不应该默认为空的,因为无论是那种类型的回复,都是有对应的用户的,这个疏忽也造成了我在后面构建"我的评论"界面时,无法展示出文章作者的详细信息。

2、封装数据库

数据访问层Dao主要封装了对数据库的访问:
很平常的SQL语句,只简单说明下:分别是添加评论、根据id删除评论、获取该文章的所有评论、获取该用户的所有评论、通过id获取该评论

(省略了CommentTask接口即实现)

最后仓库层 将这些方法都封装 起来,方便后续调用,如下图所示:

二、布局

1、文章详情界面的评论布局

就是个RecyclerView哈哈

2、评论的适配器布局

可以看到适配器布局中还包含了一个RecyclerView,这里面展示的就是二级评论

3、二级评论的适配器布局

这个布局很简单,就由几个TextView组件构成

三、代码逻辑

首先,在ViewModel层初始化该文章的所有评论,观察评论数据变化,给评论适配器数据赋值并刷新,在评论适配器中再对level为2的评论数据进行过滤并赋值给回复适配器。

1、获取评论数据

kotlin 复制代码
var comments = MutableLiveData<List<CommentInfo>>()
comments.value = commentStoreRepository.getCommentsByNewId(newsId)

通过文章的id获取到评论

2、给评论适配器数据赋值

3、在评论适配器处理数据

首先,评论适配器中的数据是通过文章的id获取到的所有评论,包含了一级和二级评论,在评论适配器展示的当然不能是所有的评论,而是所有一级的评论,而二级评论的数据需要再进行过滤传递给回复适配器

所以,在绑定ViewHolder以及getItemCount时,需要对传递的数据进行过滤,

如图所示,allList是通过文章的id获取到的所有评论,list是level为1 的所有评论,replyList是level为2 的所有评论。getItemCount返回的是一级评论的个数。在绑定ViewHolder时,将一些回调函数和一级评论和二级评论列表传递进去,接着就看ViewHolder中的数据处理逻辑,如下两张图

这张图只是一些简单的一级数据的赋值和一些回调参数的调用传参

这里首先对二级评论进行过滤,过滤出与该条一级评论相关联的二级评论,接着对布局进行一些操作,接着是赋值操作和回复适配器中一些函数的实现。

4、在回复适配器处理数据

在这里就不需要对数据进行处理了,只有简单的赋值和回调了

5、回调函数的实现

四、实现效果

1、评论功能

2、我的评论展示

这里的"@3333333333"就是因为replyNumber为空的导致无法展示出文章作者的详细信息,只有展示用户主键了,后面再进行修改。

五、结语

就这样,一个简单的二级评论功能就完成了。文章若出现错误,欢迎各位批评指正,写文不易,转载请注明出处谢谢。

相关推荐
追光天使1 小时前
【Mac】和【安卓手机】 通过有线方式实现投屏
android·macos·智能手机·投屏·有线
小雨cc5566ru1 小时前
uniapp+Android智慧居家养老服务平台 0fjae微信小程序
android·微信小程序·uni-app
一切皆是定数2 小时前
Android车载——VehicleHal初始化(Android 11)
android·gitee
一切皆是定数2 小时前
Android车载——VehicleHal运行流程(Android 11)
android
problc2 小时前
Android 组件化利器:WMRouter 与 DRouter 的选择与实践
android·java
图王大胜3 小时前
Android SystemUI组件(11)SystemUIVisibility解读
android·framework·systemui·visibility
服装学院的IT男7 小时前
【Android 13源码分析】Activity生命周期之onCreate,onStart,onResume-2
android
Arms2067 小时前
android 全面屏最底部栏沉浸式
android
服装学院的IT男7 小时前
【Android 源码分析】Activity生命周期之onStop-1
android
人间有清欢10 小时前
十、kotlin的协程
kotlin