IM多型別holder封裝

2021-10-10 07:14:38 字數 1504 閱讀 7732

如標題,這是乙個在列表多型別檢視時的乙個簡化封裝方法,減少多餘**,提高復用性,更好迭代擴充套件,先看檢視列表效果圖

咋一看感覺就是乙個普通的列表,但是要講的也不是效果,可以看到一般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型別介面卡,會話列表

recyclerview用於多型別

參考 高仿各大 首頁 使用分型別的recyclerview來實現 android 乙個改善的okhttp封裝庫 效果 依賴 dependencies布局 xmlns android xmlns tools android layout width match parent android layou...

封裝,繼承,多型

一 1 封裝 該隱藏隱藏,該公開的公開 屬性隱藏,同時提供get set方法 有些方法應該隱藏 方法宣告公開,實現隱藏。實現的改變對架構的影響最小 2 繼承 一般 特殊 單繼承 乙個類最多只能有乙個直接父類。類之間可以形成樹狀關係 根據訪問許可權,子類如果可以訪問父類的屬性和方法,就能繼承 priv...

繼承 封裝 多型

一 封裝 封裝是實現物件導向程式設計的第一步,封裝就是將資料或函式等集合在乙個個的單元中 我們稱之為類 被封裝的物件通常被稱為抽象資料型別。封裝的意義 封裝的意義在於保護或者防止 資料 被我們無意中破壞。在物件導向程式設計中資料被看作是乙個中心的元素並且和使用它的函式結合的很密切,從而保護它不被其它...