recyclerview历史

本文介绍了Android 5.0引入的重要组件RecyclerView,详细阐述了它的功能,包括LinearLayoutManager、GridLayoutManager和StaggeredGridLayoutManager等布局管理器,以及如何设置适配器和实现点击、长按事件。此外,还讨论了如何在适配器中进行数据的增删改操作,并展示了动画效果的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

recyclerview历史
2014年10月16日Google正式将Android从”(奇巧)KitKat(Android 4.4)”升级为”(棒棒糖)Lollipop(Android 5.0到5.1.1)”, 成为Android有史以来最大的一次变革,新增多达5000+个API,在众多的新特性中,其中全新的设计语言Material Design,全新的通知中心设计,以及全新的ART模式最是吸引开发者的眼球,让我们来细细品味其魅力之recyclerview

Android5.0新控件 v7扩展包之RecyclerView
功能
RecyclerView提供了三种布局管理器
1、LinearLayoutManager:线性布局管理器,支持水平和垂直效果。
  2、GridLayoutManager:网格布局管理器,支持水平和垂直效果。
  3、StaggeredGridLayoutManager:分布型管理器,瀑布流效果Animations(动画)效果

核心类

       //找控件
        RecyclerView mRecyclerView = (RecyclerView) findViewById(R.id.rv);
        //设置布局管理器
        LinearLayoutManager layoutManager = new LinearLayoutManager(this);        mRecyclerView.setLayoutManager(layoutManager);
               //设置适配器
        HomeAdapter adapter = new HomeAdapter(this);
        mRecyclerView.setAdapter(adapter);
RecylerView适配器
把View绑定到ViewHolder上onCreateViewHolder(ViewGroup parent, int viewType)
绑定数据给控件onBindViewHolder(MyViewHolder holder, final int position)
获取数据的数量
   getItemCount()
自定义的ViewHolder,持有每个Item的的所有界面元素
    public class MyViewHolder extends          RecyclerView.ViewHolder {
       public MyViewHolder(View itemView) {
         super(itemView);       
        }
    }
接口回调实现
①新建两个内部接口:
public interface OnItemClickListener{
        void onItemClick(View view,int position);
    }
    public interface OnItemLongClickListener{
        void onItemLongClick(View view,int position);
    }
②新建两个私有接口变量用于保存用户设置的监听器及其set方法:
   private OnItemClickListener mOnItemClickListener;
    private OnItemLongClickListener mOnItemLongClickListener;
    public void setOnItemClickListener(OnItemClickListener mOnItemClickListener){
        this.mOnItemClickListener = mOnItemClickListener;
    }
    public void setOnItemLongClickListener(OnItemLongClickListener mOnItemLongClickListener) {
        this.mOnItemLongClickListener = mOnItemLongClickListener;
    }


实现条目点击和长按事件
  点击事件
adapter.setOnItemOnClickListener(new HomeAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(View view, int position) {
                Toast.makeText(MainActivity.this, "点击事件:" + position, Toast.LENGTH_SHORT).show();
            }
        });
      长按事件
 adapter.setOnItemLongClickListener(new HomeAdapter.OnItemLongClickListener() {
            @Override
            public void onItemLongClick(View view, int position) {
                Toast.makeText(MainActivity.this, "长按事件:" + position, Toast.LENGTH_SHORT).show();
            }
        });

  //把view绑定给ViewHolder
    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = View.inflate(context, R.layout.item, null);
        final MyViewHolder holder = new MyViewHolder(view);
        view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int position = holder.getLayoutPosition();
                //注册点击监听
                if (itemClickListener != null) {
                    itemClickListener.onItemClick(v, position);
                }
            }
        });
        view.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                int position = holder.getLayoutPosition();
                if (itemLongClickListener != null) {
                    //注册长按监听
                    itemLongClickListener.onItemLongClick(v, position);
                }
                //事件消费,不继续传递
                return true;
            }
        });
        return holder;
    }

增删改
在适配器添加三个方法

//添加数据
public void add(int position, String text) {
data.add(position, text);
notifyItemInserted(position);
}

//移除数据
public void remove(int position) {
data.remove(position);
notifyItemRemoved(position);
}

//改变数据
public void change(int position, String text) {
data.remove(position);
data.add(position, text);
notifyItemChanged(position);
}

在代码中设置点击的时候调用并执行
adapter.setOnItemClickListener(new MyAdapter.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
Toast.makeText(MainActivity.this, "条目的点击监听:" + position, Toast.LENGTH_SHORT).show();
MyItemAnimator animator = new MyItemAnimator();
animator.setAddDuration(2000);
adapter.add(position, "新的添加的条目");
recyclerView.setItemAnimator(animator);
animator.setMoveDuration(2000);
}
});
adapter.setOnItemLongClickListener(new MyAdapter.OnItemLongClickListener() {
@Override
public void onItemLongClick(View view, int position) {
Toast.makeText(MainActivity.this, "条目的长按监听:" + position, Toast.LENGTH_SHORT).show();
/* MyItemAnimator animator = new MyItemAnimator();
animator.setRemoveDuration(2000);
adapter.remove(position);
recyclerView.setItemAnimator(animator);
animator.setMoveDuration(2000);*/

//改变数据
MyItemAnimator animator = new MyItemAnimator();
// animator.setChangeDuration(2000);
adapter.change(position, "这是我改变的数据");
recyclerView.setItemAnimator(animator);
// animator.setMoveDuration(200);

}
});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值