IM多型別holder封裝
如標題,這是一個在列表多型別檢視時的一個簡化封裝方法,減少多餘程式碼,提高複用性,更好迭代擴充套件,先看檢視列表效果圖
GitHub:https://github.com/1024477951/FragmentApp
咋一看感覺就是一個普通的列表,但是要講的也不是效果,可以看到一般im列表頁型別畢竟多,程式碼邏輯較複雜,如果沒有好好的複用封裝後面冗餘過多,擴充套件麻煩
最普通的寫法應該是直接在介面卡的bind方法里根據返回的型別,然後switch,碼不同的邏輯,因為每個型別的樣式都不同,而且邏輯也不一樣,所以在沒有什麼思路的情況下最容易的一種做法
當然,很多人都會想到這樣不好,要封裝一波,抽象成base,避免switch繁瑣的操作,然後在bind裡通過base類呼叫,達到複用的操作,我也覺得這樣挺好的,不過後來發現還是可以進一步的優化,而且這樣還能在原來的基礎上更好的達到複用的效果,
因為這樣一來就相當於把邏輯都放在了viewholder裡面,這樣也就導致了viewholder裡面會有很多重複的操作,比如設定頭像,變換訊息狀態等,這樣一來是不是覺得還有優化的餘地呢,因為基本上每個型別都少不了頭像和狀態,而且一般樣式都是統一的,
所以這就讓我生出一個優化的方法來了,把這些共同的地方抽出來當作base,裡面的內容檢視動態的填充進去,而且如果不想這樣或者想完全改變型別的樣式也能通過動態設定來解決,達到一個很好擴充套件的效果
實現思路:
首先寫base xml,把頭像狀態一些通用的寫進去,然後在 createholder 給內容填充處一個容器檢視,建立具體的 holder,這一步操作大致跟通常的建立沒有什麼大區別,區別在於給檢視容器填充了內容檢視,以往的都是一整個xml直接載入,現在分為了base和內容。
接下來是封裝 baseholder,這樣就可以把一些通用的方法操作邏輯寫進去,直接在bind裡呼叫,就算沒用填充的操作,其實也能直接在base裡封裝,只是這樣的話你在xml裡就顯的麻煩了,因為假如你的xml樣式需要修改一下,那麼你每個xml都要去修改
baseholder寫好了,對繼承類提供抽象方法,這樣可以避免bind的時候轉換型別操作,直接通過base方法對每個不同的型別自定義邏輯
這樣一來無論是xml還是holder,還是adapter,都是很方便的修改擴充套件,比如你修改xml裡的一個狀態圖示,只需要在base xml裡修改一下就行了,邏輯都不用動,需要修改狀態邏輯也只需要在baseholder裡面修改一下就行了,每個型別的holder都通用,而差異化的邏輯一般只會在自定義的對應holder裡面改下就行了,擴充套件內容也是根據自己的需求在base或者child裡面編寫程式碼,有沒有感覺很是適合IM型別介面卡,會話列表
GitHub:https://github.com/1024477951/FragmentApp
相關文章
- 封裝和多型封裝多型
- 封裝,特性,多型封裝多型
- 封裝多型巢狀封裝多型巢狀
- 物件導向:封裝,多型物件封裝多型
- 封裝、繼承和多型封裝繼承多型
- 答答租車(封裝+多型)封裝多型
- RecyclerView基礎(一)Adapter與Holder的封裝之RvAdapter,RvHolderViewAPT封裝
- aardio 實現封裝繼承多型封裝繼承多型
- 面向2-封裝、繼承、多型封裝繼承多型
- PHP 技巧 - 封裝基本的資料型別PHP封裝資料型別
- go語言中的封裝,繼承和多型Go封裝繼承多型
- Java的三大特性:封裝、繼承、多型Java封裝繼承多型
- Java入門教程九(封裝繼承多型)Java封裝繼承多型
- java封裝繼承以及多型(含程式碼)Java封裝繼承多型
- JAVA物件導向基礎--封裝 繼承 多型Java物件封裝繼承多型
- 物件導向三大特性-----封裝、繼承、多型物件封裝繼承多型
- python極簡教程07:封裝、多型和繼承Python封裝多型繼承
- 物件導向三大特徵(封裝/繼承/多型)物件特徵封裝繼承多型
- Gson泛型封裝泛型封裝
- 封裝了一個騰訊雲im的flutter外掛封裝Flutter
- [JAVA] Java物件導向三大特徵:封裝、繼承、多型Java物件特徵封裝繼承多型
- Go語言封裝、繼承、介面、多型和斷言的案例Go封裝繼承多型
- java 的 四 個 基 本 特 性 ——封裝 繼承 多型 抽象Java封裝繼承多型抽象
- Delphi 根據資料庫表生成Record型別,並封裝CRUD資料庫型別封裝
- 如何使用Flutter封裝即時通訊IM框架開發外掛Flutter封裝框架
- java核心思想物件導向三大特性(封裝,繼承,多型)Java物件封裝繼承多型
- Vue Hook 封裝通用型表格VueHook封裝
- 【Python入門】12.物件導向程式設計之 三大特徵:封裝、繼承和多型 & 鴨子型別是什麼?...Python物件程式設計特徵封裝繼承多型型別
- 前幾天為了精準判斷物件型別,封裝一個高大上的資料型別的判斷,裝個逼物件封裝資料型別
- mp4封裝格式各box型別講解及IBP幀計算封裝型別
- JAVA當中的記憶體塊物件的 Lua 封裝和多型效應Java記憶體物件封裝多型
- 多型中的返回值型別多型型別
- Java基礎-基本型別和包裝型別Java型別
- 【Java基本功】一文了解Java中繼承、封裝、多型的細節Java中繼繼承封裝多型
- 【Java】瘋狂Java基礎(一)——物件導向的特徵:繼承、封裝和多型Java物件特徵繼承封裝多型
- Flutter Dio 親媽級別封裝教程Flutter封裝
- Python:多型、協議和鴨子型別Python多型協議型別
- 建立多種型別的流型別