今天好像啥也沒干,,,,打了挺久游戲,,可惡啊,它怎么這么好玩。。。
昨天大致實現了商品的留言和回復,比較粗糙,重要的是思路。
總體構思
分為留言及回復兩個板塊,留言是對該商品的留言,回復是對留言及留言的回復的回復。點擊留言按鈕即可對該貨物進行留言,點擊留言可對留言進行回復,點擊留言的回復即可對留言的回復進行回復。
這里用兩個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); } } } }