Giter Site home page Giter Site logo

mrecycler's Introduction

MRecycler

MrecyclerView介绍 接触Android也有5年左右了,这么长的时间里用过各种各样的列表,有自己写的,也有第三方的,功能也各有不同。总之,就是没有一种能完全符合工作中的需要,因此也就有了写这个控件的原始想法。接下来就说说这个控件的作用。

简单介绍

这个控件的初衷是希望有这样一个列表,只要设置数据和显示数据的布局就可以展示列表的数据,不用再频繁的写Adapter,ViewHolder等等。。。简化写列表的流程。 目前功能除了设置可以直接设置数据外还包括设置多个Header/Footer、上拉加载更多,然后控件整合了linearLayoutManager、GridLayoutManager、StaggeredGridLayoutManager,只需要简单的几个设置就可以实现列表、网格以及瀑布流。并且集成了各种布局管理的分割线。

感谢

非常感谢 yanyusong的分割线 https://github.com/yanyusong/Y_DividerItemDecoration

使用

Step 1. Add it in your root build.gradle at the end of repositories:
        allprojects {
                repositories {
                        ...
                        maven { url 'https://jitpack.io' }
                }
        }
Step 2. Add the dependency
        dependencies {
                implementation 'com.github.ps130183:MRecycler:1.1'
        }

自定义属性

属性名 描述 默认值
loadMoreRes 加载更多的布局文件 mr_load_more
loadMoreFinishRes 所有数据加载完以后显示的内容 mr_load_more_finish
loadMoreErrorRes 加载更多失败时显示的内容,有单独的点击事件监听,在加载失败时点击重新加载 mr_load_more_error
emptyRes 列表数据为空时,展示的内容 mr_empty
lmType 布局管理器类型,包括:linear,grid,staggeredGrid linear
orientation 布局管理器的布局方向,包括vertical,horizontal vertical
spanCount lmType!=linear时,每行所包含的item数量 2
dividerWidth 分割线的宽度 1dp
dividerColor 分割线的颜色 0xffefeff4
adapterType adapter的类型,目前有一般常用的adapter(def),和 带侧滑的adapter两种(swipe) def
refresh 是否需要下拉刷新,默认false不需要 false

注意:
1、以上属性需要在xml布局文件中设置
2、分割线的颜色 可以直接取资源文件中 颜色的ID值
3、分割线的宽度是以dp为单位,但是设置时不需要加dp

    <com.ps.mrcyclerview.MRecyclerView
    android:id="@+id/recyclerView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:lmType="linear"
    app:orientation="vertical"
    app:dividerColor="@color/dividerColor"
    app:dividerWidth="3"/>

例如

1、布局管理器默认是LinearLayoutManager,默认方向vertical,默认分割线宽度1dp


        <com.ps.mrcyclerview.MRecyclerVie                
            android:id="@+id/recyclerView"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

        </com.ps.mrcyclerview.MRecyclerView>
        
	//实体类需事先ItemDelegate接口,返回的内容是该实体类对应的布局文件的ID
        public class ContentEntity implements ItemDelegate {

        	private String name;

    		public ContentEntity(String name) {
        		this.name = name;
    		}

    		public String getName() {
        		return name;
    		}

    		public void setName(String name) {
        		this.name = name;
    		}

		@Override
		public int getItemViewRes() {
			return R.layout.item_content;
		}
	}
        
	//版本1.1 本次更新引入了泛型和局部刷新的机制
	private MRecyclerView<ContentEntity> recyclerView;		
        recyclerView = findViewById(R.id.recyclerView);
        recyclerView.addContentLayout(R.layout.item_content, new ItemViewConvert<ContentEntity>() {
            @Override
            public void convert(@NonNull BViewHolder holder, ContentEntity mData, int position, @NonNull List<Object> payloads) {
                holder.addRippleEffectOnClick();
                holder.setText(R.id.name,mData.getName());
            }

        }).addContentLayout(R.layout.item_content2, new ItemViewConvert<ContentEntity>() {
            @Override
            public void convert(@NonNull BViewHolder holder, ContentEntity mData, int position, @NonNull List<Object> payloads) {
                holder.setText(R.id.name,mData.getName());
            }

        }).addHeaderLayout(R.layout.header_view, new ItemViewConvert() {
            @Override
            public void convert(@NonNull BViewHolder holder, Object mData, int position, @NonNull List payloads) {

            }

        }).create();
        recyclerView.addLoadMoreListener(new LoadMoreListener() {
            @Override
            public void loadMore(int nextPage) {
                if (nextPage == 2){
                    recyclerView.loadMoreError();
                } else {
                    recyclerView.loadDataOfNextPage(getResult(nextPage));
                }

            }
        });

        recyclerView.addClickItemListener(new OnClickItemListener() {
            @Override
            public void clickItem(Object mData, int position) {
                Toast.makeText(DefaultActivity.this,"单击事件: " + position,Toast.LENGTH_SHORT).show();
            }
        });

        recyclerView.addLongClickItemListener(new OnLongClickItemListener() {
            @Override
            public void longClickItem(Object mData, int position) {
                Toast.makeText(DefaultActivity.this,"长按事件: " + position,Toast.LENGTH_SHORT).show();
            }
        });

        recyclerView.addLoadMoreErrorListener(new OnLoadMoreErrorListener() {
            @Override
            public void loadMoreError(int nextPage) {
                recyclerView.loadDataOfNextPage(getResult(nextPage));
            }
        });
        recyclerView.loadDataOfNextPage(getResult(1));

mrecycler's People

Contributors

ps130183 avatar

Watchers

 avatar

Forkers

yibulaxi

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.