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

How to use FirebaseListAdapter with 2 layouts

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

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

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

你实际上可以这样做:

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

2) 覆盖回收器视图适配器中的方法 getItemViewType 和 return 表示类型的 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 方法中,您可以访问视图类型,因此您可以简单地根据视图类型展开不同的布局。

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
         }
    }