首页 > 解决方案 > 在 android 聊天应用程序中重用布局的首选方法是什么?

问题描述

我想做一个安卓聊天应用。我为聊天部分做了一个简单的布局。我做了两个布局,我的信息和他们的信息。他们每个人只有一个文本视图。想象一下,现在我想为带有标题的图片添加布局。在这种情况下,我必须构建两个布局。一个用于我的消息,第二个用于传入消息或他们的消息。但是如果我对每条可能的消息都这样做,布局的数量就会增加,而且我的布局中也会有很多重复的东西。

电报应用 就像在这个布局中一样,你可以看到在我和他们的消息中有一个图像和一个标题,这两个布局有相似之处。我想制作带有图像和标题的布局,然后在我或他们的消息中使用它。在这种情况下,我可以轻松地更新我的布局,并为每条可能的消息创建大量布局。最好的方法是什么,或者不可能或不好?

我知道我可以通过两种不同的方式重用布局。首先通过在布局中使用 include 关键字,第二个是膨胀布局。例如像这样:

    ConstraintLayout item = findViewById(R.id.main);
    View child = getLayoutInflater().inflate(R.layout.item, null);
    item.addView(child);

重用布局并防止创建仅略有不同的布局的最佳方法是什么?现有的聊天应用程序如何做到这一点?我正在使用回收站视图进行聊天布局。

标签: androidandroid-layoutchatcode-reuse

解决方案


改为使用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);
      ...
     }
 }

推荐阅读