Android_bilibili式评论及回复的简单实现
今天好像啥也没干,,,,打了挺久游戏,,可恶啊,它怎么这么好玩。。。
昨天大致实现了商品的留言和回复,比较粗糙,重要的是思路。
总体构思
分为留言及回复两个板块,留言是对该商品的留言,回复是对留言及留言的回复的回复。点击留言按钮即可对该货物进行留言,点击留言可对留言进行回复,点击留言的回复即可对留言的回复进行回复。
这里用两个receyleview实现,一个receyleview用于显示留言,留言又有一个receyleview用于显示其中的回复。
数据库的设计思路
将所有的评论回复都放在同一张数据表中,表的结构如下:
其中包括:
每一条信息自己的objectid;
用于标识回复的abovecomment,这个属性用于存储回复的上级评论id,假如是直接回复的根评论则存放根评论的id,假如是回复的回复则存放那条回复的id;
用于存储发送这条信息的用户名的username;
用于存储评论/回复内容的saywhat;
用于存放评论及回复所属商品的id的itemid;
用于存放回复对象的用户名的tousername,这个属性是只有回复的回复才有的,用于实现这种效果:
一个简陋的数据分类方案
将数据表中关于某货物的留言信息全部查询出来,之后将留言及回复放入两个数组中,以下代码仅供参考,算法有待优化。
//选出此商品的评论后筛选根评论和子回复,查询效率有待提升 ArrayList<ArrayList<SayToItemBean>> list_reply=new ArrayList<>(); ArrayList<SayToItemBean> list_coment=new ArrayList<>(); for (SayToItemBean bean:list){ if (bean.getAbovecomment()==null){ list_coment.add(bean); list_reply.add(new ArrayList<SayToItemBean>()); } } //评论的回复,评论的回复无tousername有abovecomment for (SayToItemBean bean:list){ if (bean.getAbovecomment()!=null){ for (int i=0;i<list_coment.size();i++){ if (bean.getAbovecomment().equals(list_coment.get(i).getObjectId())){ list_reply.get(i).add(bean); } } } } //评论回复的回复的回复,有abovecomment有tousername for (SayToItemBean bean:list){ if (bean.getTousername()!=null){ for (int i=0;i<list_reply.size();i++){ if (list_reply.get(i).size()>0) if (list_reply.get(i).get(0).getUsername().equals(bean.getTousername())){ list_reply.get(i).add(bean); } } } }