Какой предпочтительный способ повторно использовать макеты в приложении чата для Android? - PullRequest
0 голосов
/ 01 октября 2019

Я хочу сделать приложение для чата на Android. Я сделал простой макет для части чата. Я сделал два макета, мое сообщение и их сообщение. Каждый из них имеет только один вид текста. Представьте, что теперь я хочу добавить макет для картинки с подписью. В этом случае мне нужно построить два макета. Один для моего сообщения и второй для входящего сообщения или их сообщения. Но если я делаю это для каждого возможного сообщения, количество макетов увеличивается, а также в моих макетах появляется много повторяющихся вещей.

Telegram app Как и в этом макете, вы можетевидите, что в моем и их сообщении есть изображение и подпись, и эти два макета имеют сходство. Я хочу сделать макет с изображением и подписью, а затем использовать его в своем сообщении. В этом случае я могу легко обновить свои макеты и сохранить себя, создавая множество макетов для каждого возможного сообщения. Каков наилучший способ сделать это, или это невозможно, или не хорошо?

Я знаю, что могу использовать макет двумя разными способами. Во-первых, используйте ключевое слово include в макете, а второй - чтобы накачать макет. Например, вот так:

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

Каков наилучший метод повторного использования макетов и предотвращения создания макетов, которые немного отличаются друг от друга, и как существующие приложения чата делают то же самое? Я использую вид рециркулятора для макета чата.

Ответы [ 2 ]

2 голосов
/ 01 октября 2019

Используйте 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);
      ...
     }
 }
0 голосов
/ 01 октября 2019

Используйте атрибут в XML для повторного использования макета. как <Include>

...