【问题标题】:What is the prefered way to reuse layouts in an android chat app?在 android 聊天应用程序中重用布局的首选方法是什么?
【发布时间】:2019-10-01 10:02:03
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 将 RV 用于多种视图类型。每种视图类型(您的文本、他们的文本、您的图像、他们的图像、bla bla bla)都将具有不同的视图类型和单独的布局。您可以像任何其他列表项一样在 RV 适配器中为它们充气

标签: android android-layout chat code-reuse


【解决方案1】:

请改用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);
    }
}

并在您的适配器中使用 3 viewHolders

 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);
      ...
     }
 }

【讨论】:

  • 这不是我的意思。我知道该怎么做。我想创建一个带有图片和标题的布局,然后将其重用于我和他们的消息,而不是创建两个带有图片和标题的布局。
  • 你想要不同的用户类型(我的,发件人)和标题的不同视图。所以这是最好的方法。否则,您可以使用一种布局。在布局中,您可以根据用户类型显示和隐藏视图。
  • 我在我的项目中使用它。我的意思是,我不是用图像和标题为我和他们的消息构建两个布局,而是用图像和标题构建一个布局,然后将其膨胀或包含在我和他们的消息中。
  • 你能给我看一张你要建立的聊天图像吗?
  • 我更新了我的问题。我很难解释。
【解决方案2】:

使用 xml 中的属性来重用布局。 喜欢<Include>

【讨论】:

  • 这真的很模糊,并没有真正回答这个问题。请考虑提供更多信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-15
相关资源
最近更新 更多