RecycleView

#一、描述

在此描述RecycleView的简单使用以及复杂使用方式

#二、使用说明
加入依赖文件

compile 'com.android.support:recyclerview-v7:23.1.1'
复制代码

###简单RecyclewView
(一)MainActivity的RecycleView的设置
``` activityRecycleview.setLayoutManager(new LinearLayoutManager(this)); //设置RecyclewView的布局管理器 UserAdapter adapter = new UserAdapter(list,this); //创建适配器 activityRecycleview.setAdapter(adapter); //设置适配器 ``` (二)Adapter的编写 ``` package com.example.junwen.myrecyceledemo;

import android.content.Context; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView;

import java.util.List;

/**

  • 描述:

  • 作者:卜俊文

  • 创建:2016/9/6 09:19

  • 邮箱:344176791@qq.com */ public class UserAdapter extends RecyclerView.Adapter<UserAdapter.UserViewHodel> {

    private List data; //数据源 private Context context; //上下文

    /** *描述:构造传入数据 *作者:卜俊文 *邮箱:344176791@qq.com *创建时间: 2016/9/6 9:40 */ public UserAdapter(List data, Context context) { this.data = data; this.context = context; }

    /** *描述:构建每个Item的布局样式 *作者:卜俊文 *邮箱:344176791@qq.com *创建时间: 2016/9/6 9:41 */ @Override public UserViewHodel onCreateViewHolder(ViewGroup parent, int viewType) { UserViewHodel view = new UserViewHodel(LayoutInflater.from( context).inflate(R.layout.item_user, parent, false)); return view; }

    /** *描述:绑定数据到对应的控件上 *作者:卜俊文 *邮箱:344176791@qq.com *创建时间: 2016/9/6 9:41 */ @Override public void onBindViewHolder(UserViewHodel holder, int position) { User user = data.get(position); holder.tv_name.setText(user.getName()); holder.tv_age.setText(user.getAge()); }

    /** *描述:返回item的个数 *作者:卜俊文 *邮箱:344176791@qq.com *创建时间: 2016/9/6 9:41 */ @Override public int getItemCount() { return data.size(); }

    /** *描述:指定ViewHodel的布局控件绑定 *作者:卜俊文 *邮箱:344176791@qq.com *创建时间: 2016/9/6 9:42 */ public class UserViewHodel extends RecyclerView.ViewHolder {

     TextView tv_name;
     TextView tv_age;
    
     public UserViewHodel(View itemView) {
         super(itemView);
         tv_age = (TextView) itemView.findViewById(R.id.item_age);
         tv_name = (TextView) itemView.findViewById(R.id.item_name);
     }
    复制代码

    } }


###RecyclewView设置特定属性
</br>

(一)设置RecycleView分割线,只需要加入以下代码,DividerItemDecoration类是自定义的。
复制代码

activityRecycleview.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST)); //设置RecycleVIew分割线

DividerItemDecoration源码
复制代码

package com.example.junwen.myrecyceledemo.view;

import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.View;

/**

  • 描述:

  • 作者:卜俊文

  • 创建:2016/9/6 10:04

  • 邮箱:344176791@qq.com */ 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); } } }

分割线是根据以下的属性来进行设置的,listDivider是系统的属性,直接设置分割线的样式即可.
复制代码
@drawable/divider_bg
复制代码

<gradient
    android:centerColor="#ff00ff00"
    android:endColor="#ff0000ff"
    android:startColor="#ffff0000"
    android:type="linear" />
<size android:height="4dp" />
复制代码
```

转载于:https://juejin.im/post/5b3ac524518825622732dfda

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值