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

  

原文地址:https://www.cnblogs.com/XiaoGao128/p/12507079.html