1.在android studio下的File=>Project Structure 给点击Dependencies、点击加号,然后选择Library Dependency,找到对应的RecycleView的库进行依赖
2.开始创建布局文件
<android.support.v7.widget.RecyclerView android:id="@+id/recycleView" android:layout_width="match_parent" android:layout_height="match_parent"></android.support.v7.widget.RecyclerView>3.在代码中进行初始化和添加适配器
a . 定义自己的适配器,继承RecycleView.Adapter<ViewHolder>
b.自定义的ViewHolder要继承RecycleView.ViewHolder
其中RecycleView.Adapte要实现三个方法
创建ViewHolder
@Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view=View.inflate(MainActivity.this,R.layout.item_single,null); MyViewHolder mViewHolder=new MyViewHolder(view); return mViewHolder; }
绑定ViewHolder
@Override public void onBindViewHolder(MyViewHolder holder, int position) { holder.tv.setText(mList.get(position)); }
返回有多少条目
@Override public int getItemCount() { return mList.size(); }
4.添加布局管理器
listView:
LinearLayoutManager manager=new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false); mRecyclerView.setLayoutManager(manager);
gridView
mRecyclerView.setLayoutManager(new GridLayoutManager(this,3));//表示3列横向gridView:
mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(5, StaggeredGridLayoutManager.HORIZONTAL));瀑布流:其实就是给GridView设置随机的高度
mHeight.add((int) (100+Math.random()*300));
ViewGroup.LayoutParams lp=holder.itemView.getLayoutParams(); if (lp!=null){ Log.i("TEST", "onBindViewHolder: "); lp.height=mHeight.get(position); holder.itemView.setLayoutParams(lp); }
5.设置Item间分割线,因为RecycleView没有分割线
首先到Github下载DividerItemDecoration,然后拷贝到app的包中;
然后可以实现自定义的分割线
首先在drawable文件下创建shape为根的资源文件
例如
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <size android:height="4dp"/> <gradient android:startColor="#fff" android:centerColor="#f0f" android:endColor="#f00" android:type="linear"/> </shape>然后在value资源文件的AppTheme的style下添加
<item name="android:listDivider">@drawable/shape</item>注意拷贝到不同版本的value文件下
接着代码添加
mRecyclerView.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL_LIST));
6.给RecycleView设置动画
mRecyclerView.setItemAnimator(new DefaultItemAnimator());//默认
如果有需要其他效果可以到github上找
7.RecycleView没有Item点击监听
所以需要手动去设置手动
public interface OnItemClickListener{ public void onItemClick(View view,int position); public void onItemLongClick(View view,int position); } class MySimpleAdapter extends RecyclerView.Adapter<MyViewHolder> { OnItemClickListener mOnclickListener; public void setmOnclickListener(OnItemClickListener mOnclickListener) { this.mOnclickListener = mOnclickListener; } /* * 创建ViewHolder * */ @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = View.inflate(MainActivity.this, R.layout.item_single, null); MyViewHolder mViewHolder = new MyViewHolder(view); return mViewHolder; } /* * 绑定ViewHolder * */ @Override public void onBindViewHolder(final MyViewHolder holder, final int position) { holder.tv.setText(mList.get(position)); if (mOnclickListener!=null){ holder.itemView.setOnClickListener(new View.OnClickListener() { //获取item的位置 final int layoutPosition=holder.getLayoutPosition(); @Override public void onClick(View v) { mOnclickListener.onItemClick(holder.itemView,layoutPosition); } }); holder.itemView.setOnLongClickListener(new View.OnLongClickListener() { //获取item的位置 final int layoutPosition=holder.getLayoutPosition(); @Override public boolean onLongClick(View v) { mOnclickListener.onItemLongClick(holder.itemView,layoutPosition); return false; } }); } } @Override public int getItemCount() { return mList.size(); } /** *添加 */ public void add(int pos){ mList.add(pos,"Add"); mAdapter.notifyItemInserted(pos); } /** * 删除 */ public void delete(int pos){ mList.remove(pos); mAdapter.notifyItemRemoved(pos); } }