【问题标题】:how to inflate different layouts in Firebase Recycler Adapter如何在 Firebase Recycler Adapter 中膨胀不同的布局
【发布时间】:2021-02-02 23:11:35
【问题描述】:

我有一个聊天活动,并试图为发送者和接收者添加不同的布局。到目前为止,我可以检索 firebase 实时数据库的数据,但发送者和接收者具有相同的布局,我已经创建了布局第二个布局并尝试使用 viewType 但无法弄清楚如何将当前用户分配给 cretin 布局,请帮助:(

聊天活动

if (!employee)
    {



   FirebaseRecyclerOptions options = new FirebaseRecyclerOptions.Builder<ChatMessageModel>()
                .setQuery(FirebaseDatabase.getInstance().getReference().child("client_emp_messages")
                        .child(formattedDate+uid), ChatMessageModel.class)
                .build();

    }

    else
    {
        // employee
        Bundle bundle = getIntent().getExtras();
        String d = bundle.getString("path_to_client_realtime_db");


        options = new FirebaseRecyclerOptions.Builder<ChatMessageModel>()
                .setQuery(FirebaseDatabase.getInstance().getReference().child("client_emp_messages")
                        .child(d), ChatMessageModel.class)
                .build();


    }

    adapter = new ChatAdapter(options);
    nMessageList.setAdapter(adapter);

聊天适配器

    public class ChatAdapter extends FirebaseRecyclerAdapter<ChatMessageModel, ChatAdapter.ChatViewHolder>
    {
 

   public ChatAdapter(@NonNull FirebaseRecyclerOptions<ChatMessageModel> options) {
        super(options);
    }

    @Override
    protected void onBindViewHolder(@NonNull ChatViewHolder holder, int i, @NonNull ChatMessageModel model) {
            holder.nMessage_text_view.setText(model.getMessage());
    }

    @NonNull
    @Override
    public ChatViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {


            View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.message_single_layout, parent, false);
            return new ChatViewHolder(view);


    }

    class ChatViewHolder extends RecyclerView.ViewHolder
    {
        TextView  nMessage_text_view;

        public ChatViewHolder(@NonNull View itemView) {
            super(itemView);

            nMessage_text_view = itemView.findViewById(R.id.message_text_view);

        }
    }
}

【问题讨论】:

    标签: firebase-realtime-database android-recyclerview chat layout-inflater


    【解决方案1】:

    我建议你做一个布局。比如右边的发送者和左边的接收者。您可以借助线性布局或相对布局来使用它。并将其可见性设置为不可见。 因此从数据库中下载消息数据并通过用户 id 令牌进行检查。如果它的数据与当前用户令牌匹配,则将其显示在右列并设置可见性可见,反之亦然。

    为此,您只需将用户令牌与消息一起存储在数据库中。

    希望你能理解。谢谢

    【讨论】:

    • 我正在用用户 ID 尝试这个想法,但我认为我不知道如何正确地做到这一点,因为整个聊天得到 1layout 发送者或接收者:(
    猜你喜欢
    • 2021-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-04
    • 1970-01-01
    • 2017-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多