Android知识程序员Android开发

RecyclerView的刷新和加载更多--个人笔记

2016-09-12  本文已影响127人  不识水的鱼

RecyclerView基础##

recyclerView 作为常见的控件,掌握基础的知识作为必备
刷新功能:
下拉刷新使用SwipeRefreshLayout居多,这里主要贴出上拉加载更多的代码

mRecyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() {
        @Override
        public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
            super.onScrollStateChanged(recyclerView, newState);
        }

        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
            super.onScrolled(recyclerView, dx, dy);
            int lastVisibleItemPosition = mGridLayoutManager.findLastCompletelyVisibleItemPosition();
            if (lastVisibleItemPosition == mGridLayoutManager.getItemCount() - 1) {
                //加载更多
                page++;
                getInfo();
            }
        }
    });

RecyclerView的回调点击事件,这个本可以在adapter里添加点击事件的,但是有时为了方便,需要在RecyclerView的页面或者fragment里面写item的点击事件,采用回调:
在adapter里面写

    itemView.setOnClickListener(this);
    public void onClick(View v) {
        //点击事件
        if(onItemClickListener!=null) {
            onItemClickListener.onItemClick(getLayoutPosition());
                //注意这个方法getLayoutPosition()获取到positon
        }
    }  
    //下面是回调
    public void setOnItemClickListener(OnItemClickListener onItemClickListener){
        this.onItemClickListener = onItemClickListener;
    }
    private OnItemClickListener onItemClickListener;
    
    public interface OnItemClickListener{
        void onItemClick(int position);
    }  

在RecyclerView的页面里

    mWorkPoolAdapter.setOnItemClickListener(new WorkPoolAdapter.OnItemClickListener() {
        @Override
        public void onItemClick(int position) {
            //TODO
        }
    });

判断是否滚动的监听

    mRecyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() {
        @Override
        public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
            super.onScrollStateChanged(recyclerView, newState);
            if (newState==RecyclerView.SCROLL_STATE_DRAGGING) {
                mWorkPoolAdapter.setListFling(true);//滚动是否加载图片,传值到adapter
            }else {
                mWorkPoolAdapter.setListFling(false);
            }
        }
    });

RecyclerView的线条不是很好画,这里写一个简单的布局间距,有时候可以代替线条,在布局文件里,其实用一个View就来代替线条了,方便简单。

package com.gaiamount.module_workpool.adapters;
import android.graphics.Rect;
import android.support.v7.widget.RecyclerView;
import android.view.View;

public class SpacesItemDecoration extends RecyclerView.ItemDecoration{
private int space;

public SpacesItemDecoration(int space) {
    this.space = space;
}

@Override
public void getItemOffsets(Rect outRect, View view,
                           RecyclerView parent, RecyclerView.State state) {
    int childLayoutPosition = parent.getChildLayoutPosition(view);
    if(childLayoutPosition%2==0) {//偶数位
        outRect.right = space/2;

    } else {//奇数位
        outRect.left = space/2;
            }
    }
}
//下面这句是在recyclerView的页面里面写的,可以设定每个item的间距
mRecyclerView.addItemDecoration(new SpacesItemDecoration(16));//16px
上一篇下一篇

猜你喜欢

热点阅读