[英]Most efficient way of having two different layouts in Android RecyclerView
我在聊天布局上工作,我需要兩個“不同”的布局來發送和接收消息。 這兩種布局幾乎相同,因此可以只設置一種布局並動態更改其背景以及某些重力/邊距/填充屬性。
使用RecyclerView之后,我對效率有所懷疑。 為了實現我的目標,我看到了兩種方法:
經過一番搜索,我不確定什么是最好和最有效的方法,因此一些專家建議會很好。 謝謝。
PD:背景是9patch圖像,在場景1中,我使用getResources()和setBackground()加載了它們。 在舊設備上,Scroll感覺有點慢。
此功能實際上內置於RecyclerView中。 您會注意到, createViewHolder
的方法簽名是createViewHolder(ViewGroup parent, int viewType)
。 實際上, viewType
是您所需要的。 為此,您可以重寫getItemViewType
以便根據位置,它為發送或接收的消息返回不同的整數。 這將允許您在createViewHolder
創建一個簡單的switch語句以選擇適當的視圖類型。
@Override
public int getItemViewType(int position) {
if(listOfMessages.get(position).isSentMessage())
return 1;
else
return 2;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType){
if(viewType == 1)
//inflate sent message layout
else if(viewType == 2)
//inflate received message layout.
}
首先,測量並確定這是否是值得努力的關鍵會議。
在那之后,合並類型通常是一個好習慣,除非交換它們的成本很高。 只需更改背景就可以了。 框架會更改一個已經緩存的可繪制ID,但是我不確定它的便宜程度取決於您的可繪制對象。 如果發現價格昂貴,則可以手動回收這些背景可繪制對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.