Skip to content

Android强大的RecycerView框架。A RecyclerView which is implemented to make it easier to use.

Notifications You must be signed in to change notification settings

Z-P-J/ZRecyclerView

Repository files navigation

ZRecyclerView

A RecyclerView library which is implemented to make it easier to use. 安卓RecyclerView框架,无侵入式设计,支持头布局、尾布局,状态切换、上拉加载更多等功能。独创MultiData,让你更容易实现复杂布局、多布局。

1. Gradle

Latest Version:

implementation 'com.github.Z-P-J:ZRecyclerView:1.0.1'

2. EasyRecycler的使用(无侵入式)

step 1:

<android.support.v7.widget.RecyclerView
        android:id="@+id/recycler_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />

step 2:

        RecyclerView recyclerView = findViewById(R.id.recycler_view);
        EasyRecycler<Integer> easyRecycler = new EasyRecycler<>(recyclerView);
        easyRecycler.setData(list) // 设置数据
                .setItemRes(R.layout.layout_text) // 设置item
                .onBindViewHolder(new IEasy.OnBindViewHolderListener<Integer>() { // 绑定viewholder
                    @Override
                    public void onBindViewHolder(EasyViewHolder holder, List<Integer> list, int position, List<Object> payloads) {
                        
                    }
                })
                .onItemClick(new IEasy.OnItemClickListener<Integer>() { // item点击
                    @Override
                    public void onClick(EasyViewHolder holder, View view, Integer data) {
                        
                    }
                })
                .onItemLongClick(new IEasy.OnItemLongClickListener<Integer>() { // item长按   
                    @Override
                    public boolean onLongClick(EasyViewHolder holder, View view, Integer data) {
                        return false;
                    }
                })
                .build();
        easyRecycler.showContent(); // 显示内容
        easyRecycler.showLoading(); // 显示加载中
        easyRecycler.showEmpty(); // 显示数据为空
        easyRecycler.showError(); // 显示加载出错
        easyRecycler.showNoNetwork(); // 显示无网络

3. EasyRecyclerLayout的使用(封装了SwipeRefreshLayout,侵入式)

step 1:

<com.zpj.recyclerview.EasyRecyclerLayout
        android:id="@+id/recycler_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />

step 2:

        recyclerLayout = findViewById(R.id.recycler_layout);
        recyclerLayout.setData(list)
                .setItemRes(R.layout.layout_text) // 布局layout
                .setEnableSelection(true) // 是否支持选择模式
                .setEnableSwipeRefresh(true) // 是否支持下拉刷新
                .setEnableLoadMore(true) // 是否支持加载更多
                .setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { // 下拉刷新回调
                    @Override
                    public void onRefresh() {
                        list.clear();
                        recyclerLayout.notifyDataSetChanged();
                    }
                })
                .setOnSelectChangeListener(new EasyRecyclerLayout.OnSelectChangeListener<Integer>() { // 选择模式回调
                    @Override
                    public void onSelectModeChange(boolean selectMode) {

                    }

                    @Override
                    public void onChange(List<Integer> list, int position, boolean isChecked) {

                    }

                    @Override
                    public void onSelectAll() {

                    }

                    @Override
                    public void onUnSelectAll() {

                    }
                })
                .onLoadMore(new IEasy.OnLoadMoreListener() { // 加载更多
                    @Override
                    public boolean onLoadMore(EasyAdapter.Enabled enabled, int currentPage) {
                        for (int i = currentPage * 20; i < (currentPage + 1) * 20; i++) {
                            list.add(i);
                        }
                        recyclerLayout.notifyDataSetChanged();
                        return true;
                    }
                })
                .onBindViewHolder(new IEasy.OnBindViewHolderListener<Integer>() { // 绑定viewholder
                    @Override
                    public void onBindViewHolder(EasyViewHolder holder, List<Integer> list, int position, List<Object> payloads) {
                        holder.setText(R.id.tv_text, "第" + list.get(position) + "个");
                    }
                })
                .onItemClick(new IEasy.OnItemClickListener<Integer>() { // item点击回调
                    @Override
                    public void onClick(EasyViewHolder holder, View view, Integer data) {
                        Toast.makeText(MainActivity.this, "第" + data + "个", Toast.LENGTH_SHORT).show();
                    }
                })
                .onItemLongClick(new IEasy.OnItemLongClickListener<Integer>() { // item长按回调
                    @Override
                    public boolean onLongClick(EasyViewHolder holder, View view, Integer data) {
                        recyclerLayout.getSelectedSet().add(data);
                        recyclerLayout.enterSelectMode();
                        return true;
                    }
                })
                .build();

        recyclerLayout.showContent(); // 显示内容
        recyclerLayout.showLoading(); // 显示加载中
        recyclerLayout.showEmpty(); // 显示数据为空
        recyclerLayout.showError(); // 显示加载出错
        recyclerLayout.showNoNetwork(); // 显示无网络

4. MultiData的使用(TODO完善文档,可参考MultiDataActivity

4.1 什么是MultiData?

为了使复杂布局的实现更简单,我自创了一种MultiData的方式来实现复杂布局,支持多种实体类,结合MultiRecycler来方便我们使用。 MultiData你可以理解为比RecyclerView.Adapter更小的RecyclerView.Adapter,在MultiData中可以实现RecyclerView.Adapter的逻辑,比如onBindViewHolder、getViewType、getCount、notifyDataSetChange等

4.1 创建MultiRecyclerViewWrapper对象

List<MultiData<?>> list = new ArrayList<>();
MultiRecyclerViewWrapper wrapper = MultiRecyclerViewWrapper.with(recyclerView);

4.2 自定义MultiData

MultiData是一个抽象类,我们需要继承它并实现一些方法

/*
加载数据,一般在子线程中加载数据
return:true:表示还有更多数据,false:数据加载完成
*/
public boolean loadData() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.sleep(1000);
                    for (int i = 0; i < 16; i++) {
                        list.add("" + i);
                    }
                    showContent();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }).start();
        return false;
}

4.3 todo完善文档

5. Layouter的使用(TODO完善文档,可参考LayoutManagerActivity

5.1 什么是Layouter?

为了只通过一个RecyclerView实现以前需要嵌套RecyclerView才能实现的复杂布局,新增了自定义的MultiLayoutManager和Layouter,其中Layouter代理MultiLayoutManager的布局、填充的子view的功能,需结合MultiRecycler和MultiData使用。

// Layouter例子
public class LayoutManagerActivity extends AppCompatActivity {

    private MultiRecycler mRecycler;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_recycler);

        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < 57; i++) {
            list.add(i);
        }

        List<MultiData<?>> multiDataList = new ArrayList<>();
        multiDataList.add(new LayouterMultiData(list, new HorizontalLayouter()) {
            @Override
            public int getLayoutId() {
                return R.layout.item_text_grid;
            }
        });
        multiDataList.add(new LayouterMultiData(list, new VerticalLayouter()));
        multiDataList.add(new LayouterMultiData(list, new GridLayouter(2)));
        multiDataList.add(new LayouterMultiData(list, new HorizontalLayouter()) {
            @Override
            public int getLayoutId() {
                return R.layout.item_text_grid;
            }
        });
        multiDataList.add(new LayouterMultiData(list, new VerticalLayouter()));
        multiDataList.add(new LayouterMultiData(list, new GridLayouter(3)));

        RecyclerView recyclerView = findViewById(R.id.recycler_view);
        mRecycler = new MultiRecycler(recyclerView, multiDataList);
        mRecycler.setLayoutManager(new MultiLayoutManager()).build();
    }

}

About

Android强大的RecycerView框架。A RecyclerView which is implemented to make it easier to use.

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages