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

标签 java android firebase firebase-realtime-database chat

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

相关文章:

java - 在简单的 Java Swing 游戏中使用哪些容器/图形组件?

android - 云 Firestore : retrieving cached data via direct get?

android - wifi直连文件共享

node.js - Firebase Admin Nodejs 找不到模块 service_account.json

java - Webfont 提供在表单帖子上下载

java - 在 Java 中集成 2 个 XML 文件

java - 无法在 SciTE 中执行 Java 代码

android - 如何实现智能裁剪功能

android - Firebase - 无法解析符号 'MyFirebaseMessagingService'

ios - 加载新消息 Swift 4.2 和 Firebase