最近搞完了置頂聊天史隆,來寫篇文章分享下經驗。
其實剛剛開始 曼验,我自己在想泌射,我是不是要去做出類似于QQ那種的滑動,然后顯示置頂和刪除鬓照。
我就開始寫熔酷,寫完了之后然后去置頂,取消置頂豺裆,其實是有用的拒秘,但是為什么我到最后還是沒有選擇這個效果呢?
因為這個最后是要到Adapter里面去設置這兩個按鈕臭猜,我本人并不喜歡這東西放到Adapter里面躺酒,接下來強迫癥來了,直接把代碼全部刪除蔑歌,換一種思路..........我想到了微信羹应,點擊彈出一個菜單,和dialog很很像的一個功能次屠。
好园匹,來跟著我一起走一下思路。
首先是帅矗,要實現(xiàn)置頂聊天偎肃,那么我們就要有兩個List集合,一個是置頂?shù)幕氪耍粋€是不是置頂?shù)睦鬯蹋缓笾庙數(shù)氖切枰粋€小小的數(shù)據(jù)庫去保存置頂?shù)膶υ捜说腢serName;這里凛俱,環(huán)信給出了EMConversation的一個方法紊馏,帶大家看看技術文檔
這里框出來的就是我們要用的至關重要的方法,特別重要蒲犬,
看下這個文檔里面說的非常清楚朱监,也就是擴展字段,設置一個擴展字段我們才知道這條Conversation的特別之處原叮,然后去判斷這個會話有沒有設置擴展消息赫编,有的話巡蘸,那就排到置頂?shù)哪莻€集合里面去。
接下來我們要準備的是數(shù)據(jù)庫
也就是這兩個東西擂送,準備就緒悦荒,藍后 ..... 要開始大動,也就是把關于會話列表里面的東西全部放到項目里面來嘹吨。
所要動的就是這3個類搬味,全部移動到項目中,因為數(shù)據(jù)庫要在Adapter和ListView里面操作蟀拷,這一步很簡單碰纬,動動手就行。
那么這些全部做完之后问芬,我們開始寫代碼了悦析,仿照通訊錄的數(shù)據(jù)庫來
這里就是getset,然后在DemoHelper里面
藍后愈诚,再Application里面去給它暴露出兩個方法她按。
好了牛隅,數(shù)據(jù)庫的東西是配置完成了炕柔,那么,問題就來了媒佣,怎么去啟動數(shù)據(jù)庫匕累?
這樣就添加了數(shù)據(jù)庫,注意默伍,這里添加了數(shù)據(jù)庫之后欢嘿,然后再去真正的寫置頂?shù)拇a了。也糊。炼蹦。。
首先我們先看看會話列表界面
在setupView方法中狸剃,別忘了獲取數(shù)據(jù)庫里面的置頂會話掐隐。
這里直接貼出來了ConversationListFragment,這里就是把EaseUI里面的EaseConversationlistFragment里面的內容钞馁,然后BaseFragment也就是EaseBaseFragment里面的內容了虑省。
主要加載會話的方法就是這個方法,主要代碼就是synchronized里面的內容僧凰,這里很容易就能夠理解For循環(huán)里面的內容探颈,然后我們要在這里面判斷,有沒有會話是包含擴展字段的训措,有的話就將包含擴展字段的會話放入top_list這個集合里面伪节;藍后你們可以看到topList光羞,這個List就是圖10里面的topList,topMap也是圖10里面的怀大。藍后狞山,我們可以看到排序方法,也就是會話列表的排序方法(sortConversationByLastChatTime)叉寂,這里我自己寫了一個排序方法萍启,并沒有用到Pair
其實這兩個方法是一樣的,一樣的效果屏鳍。
那么接下來勘纯,就是看看ConversationList
最主要的就是這個init方法,也沒什么說的钓瞭。驳遵。那么接下來就到ConversationAdapter
這里就和EaseUI里面的那個EaseConversationAdapter有點不一樣了,EaseConversationAdapter里面是繼承ArrayAdapter的山涡,這里是繼承BaseAdapter堤结,在這里使用BaseAdapter為了方便大家能夠理解。
我們只需要在getItem和getCount里面做點手腳就可以了
好了鸭丛,到這里就完成了整個置頂會話的顯示竞穷,那么接下來,我們就要寫一下置頂功能了鳞溉,這里很有必要說明下瘾带,個人意見,在寫會話列表的時候熟菲,推薦使用一個Fragment去繼承EaseConversationListFragment看政。繼承之后我們就可以重寫setUpView方法,在這方法里面我們進行一系列的操作抄罕。
這里就是用到的長按事件允蚣,然后顯示一個Dialog,在Dialog里面去實現(xiàn)置頂功能的操作呆贿。這里由于代碼過長嚷兔,所以截兩張圖。榨崩。谴垫。。
圖17主要就是Dialog的顯示
在這里就是刪除會話等這個按鈕的點擊事件母蛛。
在里就是置頂?shù)狞c擊事件了翩剪。。
好了 到這里已經完成了置頂?shù)娜看a展示了彩郊。個人感覺還是很詳細的前弯,如果還是不懂蚪缀,那就環(huán)信互幫互助-非官方 340452063來這,給你解答你的問題