26
2017
09

下拉刷新和上拉加载的RecyclerView,可以设置EmptyView

版权声明:本文为博主原创文章,未经博主允许不得转载。
特别声明:本系列文章leicher著作权所有,转载请注明出处。

  • 渊源
    想必大家对RecyclerView上拉刷新和下拉加载并不陌生,可是在大多数的开源框架中大多使用比较死板的方式提供给开发者(即拓展性极差)。本篇博客就是介绍开源框架LRecyclerView的使用。github 地址:[https://github.com/leicher/lrecyclerview][1]

  • 由于Header 和 Footer 以及 Empty 使用方式差不多,在这里就简单介绍一下Header的使用。下面是代码:

public class SimpleFooter extends HeaderWrapper {
    public SimpleFooter(Context context) {
        super(context);
    }
    ...
}

自己的定义的 Header 必须继承自HeaderWrapper,并实现其中的方法。在其中继承的方法中实现自己的逻辑。

  • 在你的activity 中
  public class LRecyclerViewActivity extends Activity{
            @Override
            protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            LrecyclerView recycler = (LRecyclerView) findViewById(R.id.recycler);
            GridLayoutManager manager = new GridLayoutManager(this,2);
            recycler.setLayoutManager(manager);
            SparseIntArray layouts = new SparseIntArray();
            layouts.put(1,R.layout.img_item);
            layouts.put(2,R.layout.text_item);
            recycler.setAdapter(new MultiTypeAdapter<String>().list(list)
                .generator(new LAdapter.TypeGenerator<MultiTypeAdapter<String>>() {\n
                    @Override
                    public int generate(MultiTypeAdapter<String> adapter, int position)                     {
                        return position % 3 == 0 ? position % 2 == 0 ? 1 : 2 : 1;
                        }
                        }).layouts(layouts).binder(new LAdapter.TypeBinder<MultiTypeAdapter<String>>() {
                        @Override            
                        public void bind(MultiTypeAdapter<String> adapter, LHolder holder, int     position, int viewType) { 
                            if (viewType == 1){
                                holder.setImage(R.id.img,R.mipmap.ic_launcher);
                            }else {
                                holder.setText(R.id.text,position + "");
                            }
                        }
                    }));
            recycler.setRefreshEnable(true);
            recycler.setHeader(new SimpleHeader(this));
            recycler.addRefreshListener(this);
            recycler.setLoadEnable(true);
            SimpleFooter simpleFooter = new SimpleFooter(this);
            recycler.setFooter(simpleFooter);
            recycler.setMode(LRecyclerView.LOAD_MODE_DEFAULT);
            recycler.setComputeBottom(3);
            SimpleEmpty simpleEmpty = new SimpleEmpty(this);
            recycler.setEmpty(simpleEmpty);
            }
        }
  • 注意:

    1. loadmore 的加载模式有两种,LRecyclerView.LOAD_MODE_DEFAULT为当滑动到倒数的某一个position时就会触发加载回调,LRecyclerView.LOAD_MODE_PULL 为上拉触发加载。
    2. recycler.setComputeBottom(3);意思是当距离底部还有3个position的时候就触发加载回调,仅在默认模式下有效。
    3. 设置了enable 并且 设置 header 才会真正让刷新有效,加载亦然。
    4. EmptyWrapper 有很多种状态,譬如有闲置、加载中、加载失败等、均可自行继承处理。
  • 集成进项目

dependencies { compile 'leicher:lrecyclerview:1.0.1' }
上一篇:2017年腾讯移动客户端面试总结-失败经验 下一篇:基于ViewDragHelper实现侧滑