Android - Recyclerview How To Handle Viewholder With Multiple Bindings
Here is my onBindViewHolder: @Override public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { MessageModel message = values.get(posi
Solution 1:
When you have 2 different layout for recyclerview than you must have 2 different viewholder for it.
First add 2 different viewHolder for your adapter
privatestaticintTYPE_SENT=1;
privatestaticintTYPE_RECEIVED=2;
privateclassVideoSentHolderextendsRecyclerView.ViewHolder {
private RowRecyclerViewChatVideoMessageSentBinding sentBinding;
VideoSentHolder(RowRecyclerViewChatVideoMessageSentBinding binding) {
super(binding.getRoot());
this.sentBinding = binding;
}
}
privateclassVideoReceivedHolderextendsRecyclerView.ViewHolder {
private RowRecyclerViewChatVideoMessageReceivedBinding receivedBinding;
VideoReceivedHolder(RowRecyclerViewChatVideoMessageReceivedBinding binding) {
super(binding.getRoot());
this.receivedBinding = binding;
}
}
after that set item type for adapter with this method
@Override
publicintgetItemViewType(int position) {
//Here you have to check condition for sent or received typeif (TextUtils.isEmpty(list.get(position).isSent())) {
return TYPE_SENT;
} else {
return TYPE_RECEIVED;
}
}
in your onCreateViewHolder
use 2 viewHolder like this:
@Overridepublic RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == TYPE_SENT) { // for Sent layout
RowRecyclerViewChatVideoMessageSentBinding sentBinding;//Your sent bindingreturnnewVideoSentHolder(sentBinding);
} else { // for received layout
RowRecyclerViewChatVideoMessageReceivedBinding receivedBinding;//=your received bindingreturnnewVideoReceivedHolder(receivedBinding);
}
}
and inside your onBindViewHolder you can call eash viewHolder method:
@OverridepublicvoidonBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int position) {
MessageModelmessage= values.get(position);
if (getItemViewType(position) == TYPE_SENT) {
((VideoSentHolder) viewHolder).sentBinding.setMessageModel(message);
} else {
((VideoReceivedHolder) viewHolder).receivedBinding.setMessageModel(message);
}
}
Post a Comment for "Android - Recyclerview How To Handle Viewholder With Multiple Bindings"