ludeyuan/RefreshLoadRecyclerView


上拉加载,下拉刷新的RecyclerView

Download


Step 1. Add the JitPack repository to your build file

Add it in your root settings.gradle at the end of repositories:

	dependencyResolutionManagement {
		repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
		repositories {
			mavenCentral()
			maven { url 'https://jitpack.io' }
		}
	}

Add it in your settings.gradle.kts at the end of repositories:

	dependencyResolutionManagement {
		repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
		repositories {
			mavenCentral()
			maven { url = uri("https://jitpack.io") }
		}
	}

Add to pom.xml

	<repositories>
		<repository>
		    <id>jitpack.io</id>
		    <url>https://jitpack.io</url>
		</repository>
	</repositories>

Add it in your build.sbt at the end of resolvers:

 
    resolvers += "jitpack" at "https://jitpack.io"
        
    

Add it in your project.clj at the end of repositories:

 
    :repositories [["jitpack" "https://jitpack.io"]]
        
    

Step 2. Add the dependency

	dependencies {
		implementation 'com.github.ludeyuan:RefreshLoadRecyclerView:-SNAPSHOT'
	}
	dependencies {
		implementation("com.github.ludeyuan:RefreshLoadRecyclerView:-SNAPSHOT")
	}
	<dependency>
	    <groupId>com.github.ludeyuan</groupId>
	    <artifactId>RefreshLoadRecyclerView</artifactId>
	    <version>-SNAPSHOT</version>
	</dependency>

                            
    libraryDependencies += "com.github.ludeyuan" % "RefreshLoadRecyclerView" % "-SNAPSHOT"
        
        

                            
    :dependencies [[com.github.ludeyuan/RefreshLoadRecyclerView "-SNAPSHOT"]]
        
        

Readme


#主要的功能: 1、下拉刷新;(参考:https://github.com/changjiashuai/PullToRefreshLayout;

2、上拉加载(参考:https://github.com/CymChad/BaseRecyclerViewAdapterHelper);

3、滑动删除;

#说明: 下拉刷新通过PullToRefreshLayout.OnRefreshListener,上拉加载通过BaseQuickAdapter.RequestLoadMoreListener, 滑动删除通过SwipeMenuCreator。 需要注意下,RecyclerView中的Adapter需要BaseQuickAdapter,DemoHolder继承DemoHolder;如果使用系统的Adapter 就不会有加载更多的功能;

#效果图 RefreshLoadRecyclerView

#使用步骤 ##导入项目(Android Studio) allprojects { repositories { ... maven { url "https://jitpack.io" } } }

dependencies {
	        compile 'com.github.ludeyuan:RefreshLoadRecyclerView:2.2'
	}

##配置代码 1、xml

```
<ldy.com.baserecyclerview.refresh.PullToRefreshLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@android:color/white"
    android:orientation="vertical">

    <ldy.com.baserecyclerview.recyclerview.SwipeMenuRecyclerView
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</ldy.com.baserecyclerview.refresh.PullToRefreshLayout>

```

2、设置下拉刷新

```
mSwipeRefreshLayout.setOnRefreshListener(new PullToRefreshLayout.OnRefreshListener() {
    @Override
    public void onRefresh() {
        //执行刷新的事件,并在刷新完成后调用mSwipeRefreshLayout.endRefresh();
    });

```

3、自定义刷新的头部 a、自定义头部类A(参考SmallHeaderView),教程BaseHeaderView;在begin()和end()的方法中实现动画的开始和结束; b、自定义A必须继承RelativeLayout; c、定义布局B(参考small_header_view.xml),在布局中引用类A; d、在PullToRefreshLayout的引用文件中引入布局B,参考activity_main.xml

4、设置上拉加载

```
mAdapter.openLoadAnimation();
mAdapter.setOnLoadMoreListener(new BaseQuickAdapter.RequestLoadMoreListener(){
    @Override
    public void onLoadMoreRequested() {
        //执行加载更多的操作

        ...app-yingyongbao-release.apk

        //加载完成后调用下面的方法
        mAdapter.addData(lists);
        mAdapter.notifyDataChangedAfterLoadMore(true);
    }
});
mAdapter.openLoadMore(lists.size(),true);

```

5、设置滑动删除

```
//设置滑动后出现的菜单
mAdapter.setSwipeMenuCreator(new SwipeMenuCreator() {
    @Override
    public void onCreateMenu(SwipeMenu swipeLeftMenu, SwipeMenu swipeRightMenu, int viewType) {
    int width = getResources().getDimensionPixelSize(R.dimen.item_height);

     // MATCH_PARENT 自适应高度,保持和内容一样高;也可以指定菜单具体高度,也可以用WRAP_CONTENT。
     int height = ViewGroup.LayoutParams.MATCH_PARENT;

     // 添加右侧的,如果不添加,则右侧不会出现菜单。
     {
        SwipeMenuItem deleteItem = new SwipeMenuItem(MainActivity.this)
        .setBackgroundColor(Color.GRAY)
        .setText("取消收藏") // 文字,还可以设置文字颜色,大小等。。
        .setTextColor(Color.WHITE)
        .setWidth(width)
        .setHeight(height);
        swipeRightMenu.addMenuItem(deleteItem);// 添加一个按钮到右侧侧菜单。
     }
     //左侧不添加,就不会出现
});

//设置点击
mAdapter.setSwipeMenuItemClickListener(new OnSwipeMenuItemClickListener() {
/**
* Item的菜单被点击的时候调用。
* @param closeable       closeable. 用来关闭菜单。
* @param adapterPosition adapterPosition. 这个菜单所在的item在Adapter中position。
* @param menuPosition    menuPosition. 这个菜单的position。比如你为某个Item创建了2个MenuItem,那么这个position可能是是 0、1,
* @param direction       如果是左侧菜单,值是:SwipeMenuRecyclerView#LEFT_DIRECTION,如果是右侧菜单,值是:SwipeMenuRecyclerView#RIGHT_DIRECTION.
*/

@Override
public void onItemClick(Closeable closeable, int adapterPosition, int menuPosition, int direction) {
    closeable.smoothCloseMenu();// 关闭被点击的菜单。

    if (direction == SwipeMenuRecyclerView.RIGHT_DIRECTION) {
        Toast.makeText(MainActivity.this, "list第" + adapterPosition + "; 右侧菜单第" + menuPosition, Toast.LENGTH_SHORT).show();

    } else if (direction == SwipeMenuRecyclerView.LEFT_DIRECTION) {
        Toast.makeText(MainActivity.this, "list第" + adapterPosition + "; 左侧菜单第" + menuPosition, Toast.LENGTH_SHORT).show();
    }

    // TODO 如果是删除:推荐调用Adapter.notifyItemRemoved(position),不推荐Adapter.notifyDataSetChanged();
    if (menuPosition == 0) {// 删除按钮被点击。
        mLists.remove(adapterPosition);
        mAdapter.notifyItemRemoved(adapterPosition);
    }
});

```

注意:在onCreateDefViewHolder中,获取View的时候,要把viewType带上,不然会导致不能划出菜单
View view = getItemView(R.layout.news_item,parent,viewType);