Last active
December 1, 2017 04:50
-
-
Save nathanjones/7461e7f6f36b022ed4d3ee6fca0c2aa5 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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