簡體   English   中英

在Android RecyclerView中具有兩種不同布局的最有效方法

[英]Most efficient way of having two different layouts in Android RecyclerView

我在聊天布局上工作,我需要兩個“不同”的布局來發送和接收消息。 這兩種布局幾乎相同,因此可以只設置一種布局並動態更改其背景以及某些重力/邊距/填充屬性。

使用RecyclerView之后,我對效率有所懷疑。 為了實現我的目標,我看到了兩種方法:

  1. 使用1個視圖並在onBindViewHolder()中以編程方式對其進行修改
  2. 使用2種視圖類型。
  3. 有什么更有效的方法嗎?

經過一番搜索,我不確定什么是最好和最有效的方法,因此一些專家建議會很好。 謝謝。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM