所以我想在 Firebase API
的帮助下制作一个聊天应用程序,但似乎我无法在特定项目的布局之间进行更改(例如:已发送和已接收的消息)。我找到了一种方法,但它没有效率,这种方法是这样的:我为发送和接收消息的模型制作1个布局,然后如果收到消息,我将隐藏已发送的框,如果消息是隐藏接收框发送
我将它用于我的适配器:
mPostAdapterChat = new FirebaseRecyclerAdapter<Chat, ChatViewHolder>(
Chat.class,
R.layout.item_layout_chat,
ChatViewHolder.class,
mChatRef
)
那么你们有一些方法我怎样才能使用2个布局并在每个项目之间进行更改(例如发送和接收的消息)或者你知道我怎样才能比使用 gone/visibile
更好地做到这一点/ p>
答案 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
}
}