使RecyclerView适配器为不同的用户显示不同的视图



我创建了一个聊天应用程序,它使用Firebasefirestore来存储聊天消息。

有一些特定的消息,我只想让其中一个用户接收。

目前我有两种视图类型:

  1. 接收消息的ViewType

  2. 发送消息的ViewType

假设有以下对话:

user1到user2:你好

user2对user1:嘿

user1到user2:CLICKS ON A BUTTON AND AN AUTOMATIC MESSAGE IS SENT <----want it to show only to user2.

现在在我的适配器中发生的事情是,它将向两个用户显示此消息。

如何确保只有user2才能获得它?

我的适配器是:

@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view;
if (viewType == AppConstants.CHAT_SENT_KEY) {
view = LayoutInflater.from( parent.getContext() ).inflate(
R.layout.item_chat_sent,
parent,
false );
return new ChatViewHolder( view );
} else if (viewType == AppConstants.CHAT_RECEIVED_KEY) {
view = LayoutInflater.from( parent.getContext() ).inflate(
R.layout.item_chat_received,
parent,
false );
return new ChatViewHolder( view );
} else {
view = LayoutInflater.from( parent.getContext() ).inflate( R.layout.item_loading, parent, false );
return new LoadingViewHolder( view );
}
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int position) {
if (viewHolder instanceof ChatViewHolder) {
((ChatViewHolder) viewHolder).bind( (chats.get( position )) );
} else if (viewHolder instanceof LoadingViewHolder) {
showLoadingView( (LoadingViewHolder) viewHolder, position );
}
}
@Override
public int getItemViewType(int position) {
if (chats.get( position ).getSenderId().contentEquals( userId )) {
if (position == 0 && chats.size() > 49 && snapSize > 49) {
return AppConstants.CHAT_LOADING_KEY;
} else {
return AppConstants.CHAT_SENT_KEY;
}
} else {
if (position == 0 && chats.size() > 49 && snapSize > 49) {
return AppConstants.CHAT_LOADING_KEY;
} else {
return AppConstants.CHAT_RECEIVED_KEY;
}
}
}

它是连接到viewTypes的东西吗?还是我应该在绑定部分使用if条件,这样只有当用户的id是user2时,它才会显示给他?

谢谢

它是连接到viewTypes的东西,还是我应该使用if条件在我的绑定部分,所以只有当用户的id是user2时,它才会显示给他

viewTypes用于显示不同的布局,通常是与其他布局完全不同的布局。

因此,在您的情况下,您更适合修改bind部分中的逻辑,使其只显示给user2。

最新更新