所以我想在 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/