RecyclerView使用(二)

这次主要讲多种Item的使用,添加,删除

多种Item

我之前在网上见过一些其他的思路,觉得做得有些麻烦了。我的思路是通过在数据上增加一个属性Type,来通过它来判断不同的类型ViewHolder。

  1. 准备数据的改变
  • 创建一个实体类
public class ChatEntity {
    private String content;//内容
    private int type;//类型
    //剩下的构造方法,get/set方法
}
  • 添加数据
//实例化一个ArrayList对象
ArrayList<ChatEntity> list = new ArrayList<>();
//实例化一个ChatEntity对象
ChatEntity entity1 = new ChatEntity("How are you ?",0);
ChatEntity entity2 = new ChatEntity("I'm fine.And you?",1);
ChatEntity entity3 = new ChatEntity("你好吗?",0);
ChatEntity entity4 = new ChatEntity("我很好,你呢?",1);
//添加数据
list.add(entity1);
list.add(entity2);
list.add(entity3);
list.add(entity4);
  1. 在适配器中
    继承时不用加泛型
  • 复写一个返回具体类型
list.add(entity4);public int getItemViewType(int position) {
    return list.get(position).getType();
}
  • 缓存组件改为两个
public class SendViewHolder extends RecyclerView.ViewHolder{
    TextView tvSend;
    public SendViewHolder(View itemView) {
        super(itemView);
        //初始化控件
        tvSend = (TextView) itemView.findViewById(R.id.tv_send);
    }
}
public class ReceiveViewHolder extends RecyclerView.ViewHolder{
    TextView tvReceive;
    public ReceiveViewHolder(View itemView) {
        super(itemView);
        //初始化控件
        tvReceive = (TextView) itemView.findViewById(R.id.tv_receive);
    }
}
  • 创建视图方法改为
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    //判断类型是0还是1
    if (viewType == 0){
        //获取一个View对象
        View sendView = LayoutInflater.from(context).inflate(R.layout.send_item,parent,false);
        //实例化一个发送的ViewHolder
        SendViewHolder sendViewHolder = new SendViewHolder(sendView);
        return sendViewHolder;
    }else {
        //获取一个View对象
        View receiveView = LayoutInflater.from(context).inflate(R.layout.receive_item,parent,false);
        //实例化一个接收的ViewHolder
        ReceiveViewHolder receiveViewHolder = new ReceiveViewHolder(receiveView);
        return receiveViewHolder;
    }
}
  • 填充数据
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
    //判断类型值是0还是1
    if (getItemViewType(position)==0){
        //获取要显示的内容
        ChatEntity entity = list.get(position);
        String content = entity.getContent();
        //获取一个SendViewHolder对象
        SendViewHolder sendViewHolder = (SendViewHolder) holder;
        //给控件上显示内容
        sendViewHolder.tvSend.setText(content);        
    }else {
        //获取要显示的内容
        ChatEntity entity = list.get(position);
        String content = entity.getContent();
        //获取一个ReceiveViewHolder对象
        ReceiveViewHolder receiveViewHolder = (ReceiveViewHolder) holder;
        //给控件显示内容
        receiveViewHolder.tvReceive.setText(content);
    }
}

剩下的那么跟之前一样

添加

public void add(int position,String content){
    //往数据集合中添加数据
    list.add(position,content);
    //刷新无动画
    notifyDataSetChanged();
    //刷新有动画
    notifyItemInserted(position);
}

删除

public  void remove(int position){
    //判断List的大小是否小于要删除的位置
    if (list.size() < position + 1){
         return;
    }
    //数据集合中删除某个位置的数据
    list.remove(position);
    //刷新无动画
    //notifyDataSetChanged();
    //刷新有动画
    notifyItemRemoved(position);
}

注:

  • ItemAnimator是一个抽象类,它有一个默认实现类DefaultItemAnimator,为RecyclerView设置动画使用
    recyclerView.setItemAnimator(new DefaultItemAnimator());
    切记:更新动画使用notifyItemInserted(position);notifyItemRemoved(position);
  • 在github上有很多自定义的动画效果了,比如RecyclerViewItemAnimators,大家自己下载查看,
    它提供了SlideInOutLeftItemAnimator,SlideInOutRightItemAnimator等动画效果。

RecyclerView的系列的文章

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 生活本来就不容易,而我们的不努力只会让生活变得更加无赖 前几天依据《Android群英传》的学习写了一篇笔记是关于...
    AmatorLee阅读 9,131评论 7 23
  • 简介: 提供一个让有限的窗口变成一个大数据集的灵活视图。 术语表: Adapter:RecyclerView的子类...
    酷泡泡阅读 10,629评论 0 16
  • 一、概述 ItemTouchHelper在RecyclerView的整个体系中,负责监听Item的手势操作,我们通...
    泽毛阅读 8,829评论 2 26
  • 这篇文章分三个部分,简单跟大家讲一下 RecyclerView 的常用方法与奇葩用法;工作原理与ListView比...
    LucasAdam阅读 9,991评论 0 27
  • 你这是职业病。 当你轻飘飘地说出这句话的时候,我就像一台突然被贴上了封条的老旧机器,这封条甫一近身,就牵动了我的整...
    骨和饭的天净沙阅读 2,622评论 0 1

友情链接更多精彩内容