[英]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.