RecyclerView布局设置聊天界面
2018-01-30 16:08
423 查看
先上两张效果图:
——————————————————分割线————————————————————-
实体类
class Msg { static final int TYPE_TIME = 0; static final int TYPE_RECEIVE = 1; static final int TYPE_SEND = 2; String content; int type; Msg(String content, int type) { this.content = content; this.type = type; } }
Activity的布局都是一样
先说说第一张单一布局的实现,适合界面比较简单的时候使用
adapt
class MsgAdapter extends RecyclerView.Adapter<MsgAdapter.MyViewHolder> { private ArrayList<Msg> mMsgList; MsgAdapter(ArrayList<Msg> mMsgList) { this.mMsgList = mMsgList; } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = View.inflate(parent.getContext(), R.layout.item_feedback_list, null); return new MyViewHolder(view); } @Override public void onBindViewHolder(MyViewHolder holder, int position) { Msg msg = mMsgList.get(position); if (msg.type == TYPE_TIME) { holder.tv_time.setVisibility(View.VISIBLE); holder.tv_receive.setVisibility(View.GONE); holder.tv_send.setVisibility(View.GONE); holder.tv_time.setText(msg.content); } else if (msg.type == Msg.TYPE_RECEIVE) { holder.tv_receive.setVisibility(View.VISIBLE); holder.tv_time.setVisibility(View.GONE); holder.tv_send.setVisibility(View.GONE); holder.tv_receive.setText(msg.content); } else { holder.tv_send.setVisibility(View.VISIBLE); holder.tv_receive.setVisibility(View.GONE); holder.tv_time.setVisibility(View.GONE); holder.tv_send.setText(msg.content); } } @Override public int getItemCount() { return mMsgList.size(); } class MyViewHolder extends RecyclerView.ViewHolder { private TextView tv_receive; private TextView tv_time; private TextView tv_send; MyViewHolder(View itemView) { super(itemView); tv_receive = itemView.findViewById(R.id.tv_receive); tv_time = itemView.findViewById(R.id.tv_time); tv_send = itemView.findViewById(R.id.tv_send); } } }
第二幅图的adapter
class MsgAdapter extends RecyclerView.Adapter { private Context mContext; private ArrayList<Msg> mMsgList; public MsgAdapter (Context context, ArrayList<Msg> msgList) { mContext = context; mMsgList = msgList; } @Override public int getItemViewType(int position) { return mMsgList.get(position).type; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if (viewType == TYPE_TIME) { return new TimeViewHolder(LayoutInflater.from(mContext).inflate(R.layout.item_msg_time,parent,false)); } else if (viewType == TYPE_RECEIVE) { return new ReceiveMsgViewHolder(LayoutInflater.from(mContext).inflate(R.layout.item_msg_receive,parent,false)); } else { return new SendMsgViewHolder(LayoutInflater.from(mContext).inflate(R.layout.item_msg_send,parent,false)); } } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { if (holder instanceof TimeViewHolder) { ((TimeViewHolder) holder).tv_msg_time.setText(mMsgList.get(position).content); } else if (holder instanceof ReceiveMsgViewHolder) { ((ReceiveMsgViewHolder) holder).tv_receive_msg.setText(mMsgList.get(position).content); } else { af70 ((SendMsgViewHolder) holder).tv_send_msg.setText(mMsgList.get(position).content); } } class SendMsgViewHolder extends RecyclerView.ViewHolder { ImageView iv_send_face; TextView tv_send_msg; public SendMsgViewHolder(View itemView) { super(itemView); iv_send_face = itemView.findViewById(R.id.iv_send_face); tv_send_msg = itemView.findViewById(R.id.tv_send_msg); } } class ReceiveMsgViewHolder extends RecyclerView.ViewHolder { ImageView iv_receive_face; TextView tv_receive_msg; public ReceiveMsgViewHolder(View itemView) { super(itemView); iv_receive_face = itemView.findViewById(R.id.iv_receive_face); tv_receive_msg = itemView.findViewById(R.id.tv_receive_msg); } } class TimeViewHolder extends RecyclerView.ViewHolder { TextView tv_msg_time; public TimeViewHolder(View itemView) { super(itemView); tv_msg_time = itemView.findViewById(R.id.tv_msg_time); } } @Override public int getItemCount() { return mMsgList.size(); } }
相关文章推荐
- 基于RecyclerView实现的实现多样化的item样式——类似IM即时通讯聊天界面的布局效果
- RecyclerView实现聊天界面功不能滑动到指定位置问题
- RecyclerView实现聊天界面
- 在RecyclerView的子布局中使用EditText,在第一项输入数据滚动出可视界面后,再次回到第一项后,输入的数据没有了
- Android利用RecyclerView编写聊天界面
- ListView、RecyclerView 两种方式实现聊天界面支持文字、表情、图片和语音信息,支持下拉加载更多
- 【Android 界面效果48】Android-RecyclerView-Item点击事件设置
- Android ListView、RecyclerView两种方式实现聊天界面搭建
- (转载)Recyclerview | Intent与Bundle在传值上的区别 | 设置布局背景为白色的三种方法
- Android中RecyclerView布局代替GridView实现类似支付宝的界面
- RecycleView设置倒置排序,实现聊天列表界面
- Android学习——利用RecyclerView编写聊天界面
- 【Android 界面效果48】Android-RecyclerView-Item点击事件设置
- 使用RecyclerView实现聊天界面
- recyclerview设置布局样式
- 仿微信 QQ聊天布局 顶部title固定,底部是EditText,中间是RecyclerView,弹出软键盘,RecyclerView上移,标题不动
- 聊天界面 使用listview和recyclerview
- RecyclerView 作为聊天界面,被键盘遮挡的解决办法
- 聊天记录,踩的坑:设置EditText焦点;EditText软键盘和recyclerview的交互;SpannableStringBuilder的使用;ClickableSpan失效;软键盘挡住edi
- RecyclerView 添加head view头部 和foot view尾部、设置水平horizontal时左侧布局和右侧布局