gpt4 book ai didi

java - 如何使用具有 2 种布局的 FirebaseListAdapter

转载 作者:行者123 更新时间:2023-11-29 18:54:26 25 4
gpt4 key购买 nike

所以我想在 Firebase API 的帮助下制作一个聊天应用程序,但似乎我无法在特定项目的布局之间更改(例如:发送和接收的消息)。我找到了一种方法,但效率不高,这种方法是这样的:我为发送和接收消息的模型制作了一个布局,然后如果收到消息我会隐藏发送框,如果消息是隐藏接收框发送我将它用于我的适配器:

mPostAdapterChat = new FirebaseRecyclerAdapter<Chat, ChatViewHolder>(
Chat.class,
R.layout.item_layout_chat,
ChatViewHolder.class,
mChatRef
)

那么你们有什么方法可以让我使用 2 种布局并在它们之间更改每个项目(例如发送和接收的消息),或者你们知道另一种方法我怎样才能比使用 gone/visibile 做得更好

最佳答案

你实际上可以这样做:

1) 在您的聊天类中,确定消息的类型:发送或接收。添加属性或创建类似 isSent() 的方法来检查它是发送消息还是接收消息。我将使用 isSent() 方法作为示例。

2) 在回收器 View 适配器中重写方法 getItemViewType 并返回一个表示类型的 int(例如 0 表示发送,1 表示接收)

@Override
public int getItemViewType(int position) {
Chat chat = this.getItem(position);
if(chat.isSent()){
return 0;
}else{
return 1;
}
}

要在您的 RecyclerViewAdapter 中获取项目,请重写 getItem:

@Override
public Chat getItem(int pos) {
return super.getItem(getCount() - 1 - pos);
}

3) 在您的 onCreateViewHolder 方法中,您可以访问 View 类型,因此您可以简单地根据 View 类型展开不同的布局。

public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
switch (viewType) {
case 0: //inflate and return view holder type 0
case 1: //inflate and return view holder type 1
}
}

关于java - 如何使用具有 2 种布局的 FirebaseListAdapter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50204079/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com