Skip to content

Instantly share code, notes, and snippets.

@ExcaCambo
Forked from nathanjones/MessageAdapter.java
Created December 1, 2017 04:50
Show Gist options
  • Save ExcaCambo/a892329e7d342ed892acc4b7f84ec1d0 to your computer and use it in GitHub Desktop.
Save ExcaCambo/a892329e7d342ed892acc4b7f84ec1d0 to your computer and use it in GitHub Desktop.
package com.nathanrjones.messenger;
import android.location.Location;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.nathanrjones.messenger.Message.MessageType;
import java.util.List;
/**
* An adapter to display a list of Messages.
*/
public class MessageAdapter extends RecyclerView.Adapter<MessageAdapter.MessageViewHolder> {
private List<Message> messages;
@Override
public MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
MessageType type = MessageType.values()[viewType];
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
View itemView;
switch (type) {
case Text:
default:
itemView = inflater.inflate(R.layout.item_message_text, parent, false);
return new TextMessageViewHolder(itemView);
case Image:
itemView = inflater.inflate(R.layout.item_message_image, parent, false);
return new ImageMessageViewHolder(itemView);
case Location:
itemView = inflater.inflate(R.layout.item_message_location, parent, false);
return new LocationMessageViewHolder(itemView);
}
}
@Override
public void onBindViewHolder(MessageViewHolder holder, int position) {
holder.bind(position);
}
@Override
public int getItemCount() {
return messages.size();
}
@Override
public int getItemViewType(int position) {
return messages.get(position).type.ordinal();
}
abstract class MessageViewHolder extends RecyclerView.ViewHolder {
final TextView timestamp;
public MessageViewHolder(View itemView) {
super(itemView);
}
void bind(int position) {
Message msg = messages.get(position);
timestamp.setText(formatTimestamp(msg.timestamp);
}
}
private class TextMessageViewHolder extends MessageViewHolder {
final TextView messageText;
public TextMessageViewHolder(View itemView) {
super(itemView);
messageText = (TextView) itemView.findViewById(R.id.message_text);
}
@Override
void bind(int position) {
super.bind(position);
Message msg = messages.get(position);
messageText.setText(msg.text);
}
}
private class ImageMessageViewHolder extends MessageViewHolder {
final ImageView messageImage;
public ImageMessageViewHolder(View itemView) {
super(itemView);
messageImage = (ImageView) itemView.findViewById(R.id.message_image);
}
@Override
void bind(int position) {
super.bind(position);
Message msg = messages.get(position);
messageImage.setImageDrawable(msg.image);
}
}
private class LocationMessageViewHolder extends MessageViewHolder {
public LocationMessageViewHolder(View itemView) {
super(itemView);
}
@Override
void bind(int position) {
super.bind(position);
Message msg = messages.get(position);
Location location = msg.location;
// TODO: Load location into MapView
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment