Skip to content

Instantly share code, notes, and snippets.

@NikitiJ
Created August 26, 2019 06:43
Show Gist options
  • Save NikitiJ/072c96fbe349f0c77c97f07cff051ccf to your computer and use it in GitHub Desktop.
Save NikitiJ/072c96fbe349f0c77c97f07cff051ccf to your computer and use it in GitHub Desktop.
MessageItemAdapter
public class MessageItemAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private List<MessageModel> messages;
private String managerPhotoUrl;
public MessageItemAdapter(List<MessageModel> messages) {
this.messages = messages;
}
public void setManagerPhotoUrl(String url) {
if (!StringUtils.isBlank(url))
this.managerPhotoUrl = url;
}
@Override
public int getItemViewType(int position) {
return messages.get(position).author;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
View view;
switch (viewType) {
case 0:
view = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.layout_message_outgoing, viewGroup, false);
return new MessageOutgoingItemViewHolder(view);
case 1:
view = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.layout_message_incoming, viewGroup, false);
return new MessageIncomingItemViewHolder(view);
default:
view = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.layout_message_outgoing, viewGroup, false);
break;
}
return new MessageIncomingItemViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
MessageModel messageModel = messages.get(position);
switch (holder.getItemViewType()) {
case 0:
MessageOutgoingItemViewHolder messageOutgoingItemViewHolder = (MessageOutgoingItemViewHolder) holder;
messageOutgoingItemViewHolder.bind(messageModel);
break;
case 1:
MessageIncomingItemViewHolder messageIncomingItemViewHolder = (MessageIncomingItemViewHolder) holder;
messageIncomingItemViewHolder.bind(messageModel, managerPhotoUrl);
break;
}
}
@Override
public int getItemCount() {
return messages.size();
}
public void addItems(List<MessageModel> newMessages) {
if (newMessages != null && newMessages.size() != 0) {
messages.addAll(newMessages);
notifyDataSetChanged();
}
}
public void refreshMessages(List<MessageModel> newMessages) {
if (newMessages != null && newMessages.size() != 0) {
messages.clear();
messages.addAll(newMessages);
notifyDataSetChanged();
}
}
public class MessageIncomingItemViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.imageView_managerAvatar)
ImageView managerAvatar;
@BindView(R.id.textView_incoming_message)
TextView incomingMsgText;
@BindView(R.id.textView_incoming_messageSendTime)
TextView incomingMsgSendTime;
public MessageIncomingItemViewHolder(@NonNull View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
public void bind(MessageModel messageModel, String managerPhotoUrl) {
if (!StringUtils.isBlank(managerPhotoUrl)) {
GlideApp.with(managerAvatar.getContext())
.load(managerPhotoUrl)
.placeholder(R.drawable.chat_avatar_default)
.circleCrop()
.into(managerAvatar);
}
incomingMsgText.setText(messageModel.text);
incomingMsgSendTime.setText(messageModel.dateSend);
}
}
public class MessageOutgoingItemViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.textView_message_outgoing)
TextView outgoingMsgText;
@BindView(R.id.textView_outgoing_messageSendTime)
TextView outgoingMsgSendTime;
public MessageOutgoingItemViewHolder(@NonNull View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
public void bind(MessageModel messageModel) {
outgoingMsgText.setText(messageModel.text);
outgoingMsgSendTime.setText(messageModel.dateSend);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment