#一、描述
在此描述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" />
复制代码
```