android - 在 android 聊天应用程序中重用布局的首选方法是什么?
问题描述
我想做一个安卓聊天应用。我为聊天部分做了一个简单的布局。我做了两个布局,我的信息和他们的信息。他们每个人只有一个文本视图。想象一下,现在我想为带有标题的图片添加布局。在这种情况下,我必须构建两个布局。一个用于我的消息,第二个用于传入消息或他们的消息。但是如果我对每条可能的消息都这样做,布局的数量就会增加,而且我的布局中也会有很多重复的东西。
就像在这个布局中一样,你可以看到在我和他们的消息中有一个图像和一个标题,这两个布局有相似之处。我想制作带有图像和标题的布局,然后在我或他们的消息中使用它。在这种情况下,我可以轻松地更新我的布局,并为每条可能的消息创建大量布局。最好的方法是什么,或者不可能或不好?
我知道我可以通过两种不同的方式重用布局。首先通过在布局中使用 include 关键字,第二个是膨胀布局。例如像这样:
ConstraintLayout item = findViewById(R.id.main);
View child = getLayoutInflater().inflate(R.layout.item, null);
item.addView(child);
重用布局并防止创建仅略有不同的布局的最佳方法是什么?现有的聊天应用程序如何做到这一点?我正在使用回收站视图进行聊天布局。
解决方案
改为使用recycle view
并为不同的视图使用不同的视图。检查消息类型(myMessage,他们的消息,任何其他)并使用 adpater 更改您的视图。
在您的适配器中,
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == 0) {
View v = layoutInflater.inflate(R.layout.chat_row_sender, parent, false);
return new ChatViewHolder2(v);
} else if(viewType ==1){
View v = layoutInflater.inflate(R.layout.chat_row_receiver, parent, false);
return new ChatViewHolder1(v);
}else {
View v = layoutInflater.inflate(R.layout.row_chat_header, parent, false);
return new ChatHeaderViewHolder(v);
}
}
viewHolders
并在您的适配器中使用 3 ,
public class ChatViewHolder1 extends RecyclerView.ViewHolder {
public ChatViewHolder1(View itemView) {
super(itemView);
...
}
}
public class ChatHeaderViewHolder extends RecyclerView.ViewHolder {
public ChatHeaderViewHolder(View itemView) {
super(itemView);
......
}
}
public class ChatViewHolder2 extends RecyclerView.ViewHolder {
public ChatViewHolder2(View itemView) {
super(itemView);
...
}
}
推荐阅读
- angular - Angular中的对象属性值清理问题
- python - 如何在 Python 中使用 OpenCV 制作运动计数器?
- digital-ocean - 如何在数字海洋应用平台更新github源码?
- formal-verification - 无法证明仅依赖于实现/内联的基本功能
- acumatica - 可以将记录计数添加到分页网格吗?
- ssl - OpenSSL 验证返回代码:21(无法验证第一个证书)使用来自另一个组织的 Java Wildfly 和 MS CA 证书
- java - 是否有任何工具可用于识别 href 元素中的特定文本?
- javascript - 如何在 Nunjucks (11ty) 中获取唯一的嵌套数组项并对其进行循环?
- java - Robocode - 枪不指向与雷达相同的方向
- reactjs - React hooks async useEffect 加载数据库数据