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、获取谈论数据
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为空的导致无法展现出文章作者的详细信息,只要展现用户主键了,后面再进行修改。
五、结语
就这样,一个简略的二级谈论功用就完成了。文章若出现过错,欢迎各位批评指正,写文不易,转载请注明出处谢谢。