如何使用2个布局的FirebaseListAdapter

时间:2018-05-06 20:10:01

标签: java android firebase firebase-realtime-database chat

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

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

那么你们有一些方法我怎样才能使用2个布局并在每个项目之间进行更改(例如发送和接收的消息)或者你知道我怎样才能比使用 gone/visibile 更好地做到这一点/ p>

1 个答案:

答案 0 :(得分:2)

你实际上可以这样做:

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

2)覆盖Recycler视图适配器中的方法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方法中,您可以访问视图类型,这样您就可以根据视图类型简单地为不同的布局进行充气。

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