RecyclerView是Google推出的一款用來顯示大量數據的android控件, 是ListView,GridView等控件的優化版。它的使用非常靈活,高度的解耦,強制使用ViewHolder,性能更優。
它取消了ListView的addHeaderView方法,所以不能像ListView那樣方便的添加頭部樣式。
先上圖說說我想實現的效果
為RecyclerView添加header
其實就是在聊天的界面上方加入一個頭部布局。頭部布局里會顯示聊天對象的信息。
我一開始的時候用的是RecyclerViewHeader這個github上的開源插件。 但是用在我的項目中有一個致命的問題 - 用戶進入聊天的時候會先顯示最新消息,這個時候是不需要加入頭部樣式的,而只用在用戶手動上滑到最早信息的時候顯示。但是,這個插件總是會在用戶進入的時候顯示頭部樣式,并且遮蓋一部分的歷史信息。
后來只能老老實實的巧用RecyclerView的Adapter,先判斷是不是已經獲取到了最早的信息,如果是的話,在position為0的時候,返回頭部布局的view并添加頭部數據。參考了這篇文章完成。
這個文章對RecyclerView如何加Header講的很細致全面,不過它并沒有動態添加數據到頭部文件里,而我的聊天界面的頭部布局需要動態添加聊天對象信息。于是我對作者的方法進行了一些修改。
作者的ListHolder
如果是頭部布局的話,作者的ListHolder直接返回空,因為他不需要為頭部布局綁定任何數據,我會在ListHolder中獲取頭部布局中需要綁數據的控件,并重新onBind()方法,判斷如果view是頭部文件并且position為0的話,就動態添加數據。我的數據是通過重寫Adapter的構造方法傳過去的。