recyclerview历史

来源:互联网 发布:微信mac版 编辑:程序博客网 时间:2024/05/17 22:44
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);

}
});
0 0
原创粉丝点击