刚刚逛了一下github看到的,觉得很赞 所以记录分享一下 原文地址:https://github.com/nkzawa/socket.io-android-chat
1import android.content.Context; 2import android.support.v7.widget.RecyclerView; 3import android.view.LayoutInflater; 4import android.view.View; 5import android.view.ViewGroup; 6import android.widget.TextView; 7 8import java.util.List; 9 10 11public class MessageAdapter extends RecyclerView.Adapter<MessageAdapter.ViewHolder> { 12 13 private List<Message> mMessages; 14 private int[] mUsernameColors; 15 16 public MessageAdapter(Context context, List<Message> messages) { 17 mMessages = messages; 18 mUsernameColors = context.getResources().getIntArray(R.array.username_colors); 19 } 20 21 @Override 22 public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 23 int layout = -1; 24 switch (viewType) { 25 case Message.TYPE_MESSAGE: 26 layout = R.layout.item_message; 27 break; 28 case Message.TYPE_LOG: 29 layout = R.layout.item_log; 30 break; 31 case Message.TYPE_ACTION: 32 layout = R.layout.item_action; 33 break; 34 } 35 View v = LayoutInflater 36 .from(parent.getContext()) 37 .inflate(layout, parent, false); 38 return new ViewHolder(v); 39 } 40 41 @Override 42 public void onBindViewHolder(ViewHolder viewHolder, int position) { 43 Message message = mMessages.get(position); 44 viewHolder.setMessage(message.getMessage()); 45 viewHolder.setUsername(message.getUsername()); 46 } 47 48 @Override 49 public int getItemCount() { 50 return mMessages.size(); 51 } 52 53 @Override 54 public int getItemViewType(int position) { 55 return mMessages.get(position).getType(); 56 } 57 58 public class ViewHolder extends RecyclerView.ViewHolder { 59 private TextView mUsernameView; 60 private TextView mMessageView; 61 62 public ViewHolder(View itemView) { 63 super(itemView); 64 65 mUsernameView = (TextView) itemView.findViewById(R.id.username); 66 mMessageView = (TextView) itemView.findViewById(R.id.message); 67 } 68 69 public void setUsername(String username) { 70 if (null == mUsernameView) return; 71 mUsernameView.setText(username); 72 mUsernameView.setTextColor(getUsernameColor(username)); 73 } 74 75 public void setMessage(String message) { 76 if (null == mMessageView) return; 77 mMessageView.setText(message); 78 } 79 80 private int getUsernameColor(String username) { 81 int hash = 7; 82 for (int i = 0, len = username.length(); i < len; i++) { 83 hash = username.codePointAt(i) + (hash << 5) - hash; 84 } 85 int index = Math.abs(hash % mUsernameColors.length); 86 return mUsernameColors[index]; 87 } 88 } 89}