1. 我们创建项目, 添加依赖 支持recycerview的包:
compile 'com.android.support:recyclerview-v7:24.2.0'1
//在xml布局文件里添加控件
<android.support.v7.widget.RecyclerView android:id="@+id/recyclerview" android:layout_width="match_parent" android:layout_height="match_parent"> </android.support.v7.widget.RecyclerView>
//接下来就是一些很简单的事情了 我们在activity里初始化
mRecyclerView= (RecyclerView) findViewById(R.id.recyclerview); mRecyclerView.setLayoutManager(new LinearLayoutManager(this));//这里是线性布局,下面还有Grid布局//既然recyclerview是listview gridview的升级版,
那么也同样需要数据适配器,下面是适配器
class Recycle extends RecyclerView.Adapter<Recycle.Viewholder>{//这里的泛型 就是它自己的 ViewHolder @Override public Viewholder onCreateViewHolder(ViewGroup parent, int viewType) { Viewholder holder=new Viewholder(LayoutInflater.from (Recycleview_Activity.this).inflate(R.layout.item_recyclerview,parent,false));//将item布局填充 return holder; } @Override public void onBindViewHolder(Viewholder holder, int position) { holder.mTextview.setText(mData.get(position)); } @Override public int getItemCount() { return mData.size(); } class Viewholder extends RecyclerView.ViewHolder { TextView mTextview; public Viewholder(View itemView) { super(itemView); mTextview= (TextView) itemView.findViewById(R.id.recyclerview_text); } } }接着绑定适配器mAdapter=new Recycle();//实例化适配器 mRecyclerView.setAdapter(mAdapter);//绑定适配器
下面要添加分割线,系统没有提供分割线的方法,我们在 xml文件中 设置divider是无效的
我们通过此方法添加分割线:
mRecyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST) );//直接写这句话会发现没有 DividerItemRecoration,无法实例化原因就是因为系统并没有为我们提供分割线的方法 ,但是我们可以自己去实现新建一个类文件 继承ItemDecorationpublic class DividerItemDecoration extends RecyclerView.ItemDecoration { private static final int[] ATTRS = new int[]{ android.R.attr.listDivider }; public static final int HORIZONTAL_LIST = LinearLayoutManager.HORIZONTAL; public static final int VERTICAL_LIST = LinearLayoutManager.VERTICAL; private Drawable mDivider; private int mOrientation; public DividerItemDecoration(Context context, int orientation) { final TypedArray a = context.obtainStyledAttributes(ATTRS); mDivider = a.getDrawable(0); a.recycle(); setOrientation(orientation); } public void setOrientation(int orientation) { if (orientation != HORIZONTAL_LIST && orientation != VERTICAL_LIST) { throw new IllegalArgumentException("invalid orientation"); } mOrientation = orientation; } @Override public void onDraw(Canvas c, RecyclerView parent) { if (mOrientation == VERTICAL_LIST) { drawVertical(c, parent); } else { drawHorizontal(c, parent); } } public void drawVertical(Canvas c, RecyclerView parent) { final int left = parent.getPaddingLeft(); final int right = parent.getWidth() - parent.getPaddingRight(); final int childCount = parent.getChildCount(); for (int i = 0; i < childCount; i++) { final View child = parent.getChildAt(i); android.support.v7.widget.RecyclerView v = new android.support.v7.widget.RecyclerView(parent.getContext()); final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child .getLayoutParams(); final int top = child.getBottom() + params.bottomMargin; final int bottom = top + mDivider.getIntrinsicHeight(); mDivider.setBounds(left, top, right, bottom); mDivider.draw(c); } } public void drawHorizontal(Canvas c, RecyclerView parent) { final int top = parent.getPaddingTop(); final int bottom = parent.getHeight() - parent.getPaddingBottom(); final int childCount = parent.getChildCount(); for (int i = 0; i < childCount; i++) { final View child = parent.getChildAt(i); final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child .getLayoutParams(); final int left = child.getRight() + params.rightMargin; final int right = left + mDivider.getIntrinsicHeight(); mDivider.setBounds(left, top, right, bottom); mDivider.draw(c); } } @Override public void getItemOffsets(Rect outRect, int itemPosition, RecyclerView parent) { if (mOrientation == VERTICAL_LIST) { outRect.set(0, 0, 0, mDivider.getIntrinsicHeight()); } else { outRect.set(0, 0, mDivider.getIntrinsicWidth(), 0); } } }这样就会出现系统默认的分割线当然我们也可以更改分隔条的样式在主题的style中添加listDivider item
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> <item name="android:listDivider">@drawable/recyclerview_divider</item> </style>添加drawable shape样式<shape xmlns:android="http://schemas.android.com/apk/res/android"> <gradient android:centerColor="#000000" android:endColor="#ff000069" android:startColor="#ffff0fff" android:type="linear" /> <size android:height="5dp"/> </shape>