引用
在项目的build.gradle添加依赖
compile 'com.android.support:recyclerview-v7:23.4.0'
RecyclierView使用的基本方法
recyclerView.setAdapter(); 添加适配器(必须)
recyclerView.setLayoutManager(); 选择一种布局(必须)
recyclerAdapter.setHeaderView(); 添加头布局
recyclerAdapter.setFooterView(); 添加底部布局
recyclerView.setItemAnimator(new DefaultItemAnimator()); 添加默认动画
recyclerView.addItemDecoration(); 添加分割线
Layout Manager布局管理器
1.三种布局管理器:
new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false) 以垂直或者水平列表方式展示Item,第三个参数是否颠倒数据显示
new GridLayoutManager(this,4) 以网格方式展示Item,第二个参数代表列数
new StaggeredGridLayoutManager(4, StaggeredGridLayoutManager.HORIZONTAL) 以瀑布流方式展示Item,第一个参数代表列数
2.常用方法
canScrollHorizontally();//能否横向滚动 canScrollVertically();//能否纵向滚动 scrollToPosition(int position);//滚动到指定位置 setOrientation(int orientation);//设置滚动的方向 getOrientation();//获取滚动方向 findViewByPosition(int position);//获取指定位置的Item View findFirstCompletelyVisibleItemPosition();//获取第一个完全可见的Item位置 findFirstVisibleItemPosition();//获取第一个可见Item的位置 findLastCompletelyVisibleItemPosition();//获取最后一个完全可见的Item位置 findLastVisibleItemPosition();//获取最后一个可见Item的位置
Adapter适配器模板
RecyclerView必须自定义适配器,并且自己创建事件监听,布局和数据的绑定顺序,每个Item都会执行一遍:getIItemViewType(绑定类型) > onCreateViewHolder(选择布局类型) > onBindViewHolder(绑定数据)
notifyItemInserted(position);插入一个item
notifyItemRemoved(position); 移除一个item
notifyItemChanged(position) 刷新item
public class DataRecyclerAdapter extends RecyclerView.Adapter<DataRecyclerAdapter.MyViewHolder>{ private List<String> list; private Context context; private List<Integer> mHeights; private static int TYPE_TITLE=0; private static int TYPE_FOOTER=1; private static int TYPE_CONTENT =2; private View mHeaderView; private View mFooterView; public DataRecyclerAdapter(Context context, List<String> list) { this.list=list; mHeights = new ArrayList<>(); this.context=context; } //根据不同的类型适应不用的布局 @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if(mHeaderView != null && viewType == TYPE_TITLE) { return new MyViewHolder(mHeaderView); } if(mFooterView != null && viewType == TYPE_FOOTER) { return new MyViewHolder(mFooterView); } return new MyViewHolder(LayoutInflater.from(context).inflate(R.layout.options_item3,parent,false)); } //给item分布不同的类型 @Override public int getItemViewType(int position) { if (position == 0){ return TYPE_TITLE; }else if(position==list.size()){ return TYPE_FOOTER; }else{ return TYPE_CONTENT; } } public View getHeaderView() { return mHeaderView; } //添加自定义的头部 public void setHeaderView(View headerView) { mHeaderView = headerView; notifyItemInserted(0); } public View getFooterView() { return mFooterView; } //添加自定义底部 public void setFooterView(View footerView) { mFooterView = footerView; notifyItemInserted(list.size()+1); } //主体布局 @Override public void onBindViewHolder(final MyViewHolder holder, int position) { if(getItemViewType(position) != TYPE_CONTENT) { return; } holder.textView.setText(list.get(position-1)); if (mOnItemClickLitener != null){ holder.it