美文网首页Android知识程序员Android开发
RecyclerView的刷新和加载更多--个人笔记

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

作者: 不识水的鱼 | 来源:发表于2016-09-12 21:56 被阅读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

    相关文章

      网友评论

        本文标题:RecyclerView的刷新和加载更多--个人笔记

        本文链接:https://www.haomeiwen.com/subject/uttmettx.html