RecyclerView+MaterialRefreshLayout
2016-09-22 13:17
309 查看
最近有用到RecyclerView和MaterialRefreshLayout,故在此做个笔记方便下次查看,俗话说好记性不如烂笔头,何况我记性不好。
这里介绍RecyclerView和MaterialRefreshLayout的最基本用发,高手勿喷。。。
1、RecyclerView非常强大,它可以代替ListView、GridView等一系列类似的控件,所以以后基本上也就用它了
在需要使用RecyclerView的布局中添加如下代码:
2、在.java文件中添加如下代码:
3、定义适配器,新建MyAdapter类,继承RecyclerView.Adapter父类,如下:
4、自定义DividerItemDecoration,这是参考的网上的代码,具体执行过程等有时间了再去研究,贴出代码如下:
6、下面添加上拉刷新和下拉刷新,这个实现起来更简单了,通过MaterialRefreshLayout这个布局来。
这是github上的开源代码,https://github.com/android-cjj/Android-MaterialRefreshLayout
里面有详细的配置教程,我这里直接上代码:
7、首先添加依赖的库,有几种方式:
第一:在Module的build.grad里面的dependencies项中直接加入语句,compile 'com.cjj.materialrefreshlayout:library:1.3.0',我这样添加出了错误不知道咋回事不过可以换种方法;
第二:把github上的源码下载下来,将其中的library添加到自己的module中,导入library这个module,然后右击自己的module->open module setting->Dependencies,点击+号->Module dependency,加入library即可。
8、在布局文件中添加如下代码:
9、添加java代码,如下:
附上源码下载地址:https://github.com/android-yanwen/RecyclerView
这里介绍RecyclerView和MaterialRefreshLayout的最基本用发,高手勿喷。。。
1、RecyclerView非常强大,它可以代替ListView、GridView等一系列类似的控件,所以以后基本上也就用它了
在需要使用RecyclerView的布局中添加如下代码:
<android.support.v7.widget.RecyclerView android:id="@+id/home_recycle_view" android:layout_width="match_parent" android:layout_height="wrap_content"> </android.support.v7.widget.RecyclerView>和使用一般控件一样添加如上基本熟悉
2、在.java文件中添加如下代码:
/*Init RecyclerView*/ recyclerView = (RecyclerView) view.findViewById(R.id.home_recycle_view); recyclerView.setLayoutManager(new LinearLayoutManager(context)); List<String> datas = new ArrayList<>(); for (int i = 0; i < 50; ++i) { datas.add("" + i); } recyclerView.setAdapter(new MyAdapter(context, datas)); recyclerView.setItemAnimator(new DefaultItemAnimator()); //添加分割线 recyclerView.addItemDecoration(new DividerItemDecoration(context, DividerItemDecoration.VERTICAL_LIST));这里也很简单,首先获取到布局中RecyclerView的id,调用setLayoutManager()为RecyclerView的每一项设置子布局,再调用setAdapter()添加适配器,这里的MyAdapter继承了RecyclerView.Adapter父类,下面贴出,setItemAnimator()设置项的删除或者添加的动画,这里使用默认,有时间再去研究它的自定义动画,最后addItemDecoration()添加分割器,通俗点击就是每一项之间分割的线的风格,系统为提供默认风格,所以需要自定义,下面贴出。
3、定义适配器,新建MyAdapter类,继承RecyclerView.Adapter父类,如下:
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHodler> { private List<String> datas; private Context mContext; public MyAdapter(Context context, List<String> datas) { this.mContext = context; this.datas = datas; } @Override public MyViewHodler onCreateViewHolder(ViewGroup parent, int viewType) { MyViewHodler viewHolder = new MyViewHodler(LayoutInflater.from(mContext).inflate(R.layout.recycler_view_item, parent, false)); return viewHolder; } @Override public void onBindViewHolder(MyViewHodler holder, int position) { holder.text.setText(datas.get(position)); } @Override public int getItemCount() { return datas.size(); } class MyViewHodler extends RecyclerView.ViewHolder { TextView text; public MyViewHodler(View itemView) { super(itemView); text = (TextView) itemView.findViewById(R.id.text); } } }这个适配器的执行逻辑我们要搞清楚,当RecyclerView添加适配器时首先会调用onCreateViewHolder()这个函数处理的是MyViewHolder类,用MyViewHolder类加载子项的布局文件并将其返回,这是个自定义的类作用是管理RecyclerView中每个子项的布局的资源,那么我们需要定义这个类,我这里子项中只放了一个TextView所以只将TextView获取到就行了,随后会调用onBindViewHolder类,这个类就将MyViewHolder类作为参数传了进来,然后我们可以对MyViewHolder当中的资源进行处理,即将想要显示的类容绑定到RecyclerView上,至于getItemCount()我们将数据的总数通过它返回即可。
4、自定义DividerItemDecoration,这是参考的网上的代码,具体执行过程等有时间了再去研究,贴出代码如下:
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) { // Log.v("recyclerview - itemdecoration", "onDraw()"); 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); } } }5、到处RecyclerView的基本的设置就完成了,如下:
6、下面添加上拉刷新和下拉刷新,这个实现起来更简单了,通过MaterialRefreshLayout这个布局来。
这是github上的开源代码,https://github.com/android-cjj/Android-MaterialRefreshLayout
里面有详细的配置教程,我这里直接上代码:
7、首先添加依赖的库,有几种方式:
第一:在Module的build.grad里面的dependencies项中直接加入语句,compile 'com.cjj.materialrefreshlayout:library:1.3.0',我这样添加出了错误不知道咋回事不过可以换种方法;
第二:把github上的源码下载下来,将其中的library添加到自己的module中,导入library这个module,然后右击自己的module->open module setting->Dependencies,点击+号->Module dependency,加入library即可。
8、在布局文件中添加如下代码:
<com.cjj.MaterialRefreshLayout可以看到直接将RecyclerView包含到MaterialRefreshLayout布局中即可。
android:id="@+id/material_refresh"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:overlay="true"
app:wave_show="false">
<android.support.v7.widget.RecyclerView android:id="@+id/home_recycle_view" android:layout_width="match_parent" android:layout_height="wrap_content"> </android.support.v7.widget.RecyclerView>
</com.cjj.MaterialRefreshLayout>
9、添加java代码,如下:
/* init MaterialRefreshLayout */ materialRefreshLayout = (MaterialRefreshLayout) view.findViewById(R.id.material_refresh); // 允许下拉刷新 materialRefreshLayout.setLoadMore(true); materialRefreshLayout.setMaterialRefreshListener(new MaterialRefreshListener() { @Override public void onRefresh(final MaterialRefreshLayout materialRefreshLayout) { new Handler().postDelayed(new Runnable() { @Override public void run() { // 结束上拉刷新 materialRefreshLayout.finishRefresh(); } }, 3000); } @Override public void onRefreshLoadMore(final MaterialRefreshLayout materialRefreshLayout) { super.onRefreshLoadMore(materialRefreshLayout); new Handler().postDelayed(new Runnable() { @Override public void run() { // 结束下拉刷新 materialRefreshLayout.finishRefreshLoadMore(); } }, 3000); } });代码也很简单不多讲,效果如下:
附上源码下载地址:https://github.com/android-yanwen/RecyclerView
相关文章推荐
- 实例化MaterialRefreshLayout和 RecyclerView
- Android-详解RecyclerView+BGARefreshLayout实现自定义下拉刷新、上拉加载和侧滑删除效果
- TwinklingRefreshLayout 支持下拉刷新和上拉加载的 RefreshLayout,自带越界回弹效果,支持 RecyclerView,AbsListView,ScrollView,We
- SwipyRefreshLayout+recyclerview
- 使用NestedScrollView+ViewPager+RecyclerView+SmartRefreshLayout打造酷炫下拉视差效果并解决各种滑动冲突
- 配合RecyclerView实现上下拉加载的SwipyRefreshLayout
- 用 PullToRefreshLayout 实现 RecyclerView 的下拉刷新
- 自定义RefreshLayoutView与嵌套的RecyclerView的滑动冲突
- 详解RecyclerView+BGARefreshLayout实现自定义下拉刷新、上拉加载和侧滑删除效果
- 使用NestedScrollView+ViewPager+RecyclerView+SmartRefreshLayout打造酷炫下拉视差效果并解决各种滑动冲突
- TwinklingRefreshLayout 支持下拉刷新和上拉加载的 RefreshLayout,自带越界回弹效果,支持 RecyclerView,AbsListView,ScrollView等
- RecyclerView+SwiptRefreshLayout异常
- Android学习笔记二十九之SwipeRefreshLayout、RecyclerView和CardView
- PullToRefreshRecyclerView——带上拉刷新下拉加载功能的RecyclerView
- RecyclerView--GridLayoutManager设置某个item占据的列数
- RecyclerView设置背景图片长宽一样(以GridLayoutManager为例)
- PullToRefreshScrollView 嵌套RecyclerView实现特卖列表倒计时抢购
- Material-Animations(三)--Animate view layout elements
- RecyclerView使用GridLayoutManager导致间隙变大的问题
- Material Design RecyclerView添加头部底部布局(五)