问题描述
我有一个聊天活动,并尝试为发送者和接收者添加不同的布局。到目前为止,我可以检索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);
}
}
}
解决方法
我建议您进行一种布局。例如右侧的发送方和左侧的接收方。您可以在线性布局或相对布局的帮助下使用它。并将其可见性设置为“不可见”。 因此,从数据库下载消息数据并通过用户ID令牌进行检查。如果数据与当前用户令牌匹配,则将其显示在右栏中,并设置可见性为Visible,反之亦然。
为此,您只需要将用户令牌和消息一起存储在数据库中。
希望您能理解。谢谢