初次接触recyclerview记录(1)

来源:互联网 发布:韩国bj 知乎 编辑:程序博客网 时间:2024/06/01 15:56
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,无法实例化
原因就是因为系统并没有为我们提供分割线的方法  ,但是我们可以自己去实现
新建一个类文件 继承ItemDecoration
public 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>


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 老滚5老婆死了怎么办 美化包安装之后闪退怎么办 蕉下的伞坏了怎么办 苹果7通话音质特别差怎么办 雨伞的伞骨坏了怎么办 雨伞的铁丝掉了怎么办 手机银行验证码忘了怎么办 应用安装验证码忘了怎么办 大王卡激活码找不到了怎么办 信用卡的激活码找不到怎么办 育碧账号忘了怎么办 uplay八折券丢了怎么办 不小心按到了育碧解绑怎么办 台式电脑连不上网怎么办 重装系统也安装不了cad怎么办 染发灰色偏绿了怎么办 vgm数据填错了怎么办 克里格插值 不符合正态分布怎么办 克里金插值无效的输出范围怎么办 穿完臭袜子要洗手吗不洗怎么办 超敏c反应蛋白117怎么办 钢铁雄心4无模板怎么办 登录 新浪微博登录异常怎么办 微博授权失败怎么办qq uc微博授权失败怎么办 苹果手机无线网坏了怎么办 小米手机wife信号不好怎么办 微博出错了c403怎么办 微信客服没人接怎么办 安装包解析错误怎么办平板 苹果手机新浪免费邮箱用不了怎么办 苹果手机老是弹跳邮箱登陆怎么办 qq长时间不登录上不了怎么办 父母不会说英语怎么办英国签证 美军舰真来台湾怎么办 现役军人回家探亲和人打架怎么办 对四六不懂的人怎么办 赌球小2.5进3球怎么办 皮肤旧伤黑色斑怎么办 小米5c网络不好怎么办 小米去5c卡怎么办