前言:
我们在上一篇文章中学到了recyclerview但是在现实中往往需求不是那么的简单,可能需要多种需求合并起来,例如常见的上下拉刷新,删除 item 还有多种item,有着头部和尾部等等之类的。这次我们久来学习一个recyclerview的库,xrecyclerview的他集合了众多的功能,下面就让我来讲解一下如何使用。
步骤:
- 引用 库
- 创建 控件
- 下拉刷新
- 设置上拉下拉刷新的样式
- 创建头部
- 设置上下拉的文字提示语
- 设置刷新的回调
- 更新完毕
- 实战过程
- 彩蛋
- 我的案例
引用库
compile 'com.jcodecraeer:xrecyclerview:1.5.8'
创建控件
<?xml version="1.0" encoding="utf-8"?>
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.jcodecraeer.xrecyclerview.xrecyclerview
android:id="@+id/rv"
android:layout_width="match_parent"
android:layout_height="wrap_content"></com.jcodecraeer.xrecyclerview.xrecyclerview>
</linearlayout>设置是否可以上下拉刷新(默认是可以的)
recyclerview.setpullrefreshenabled(true);
recyclerview.setloadingmoreenabled(false);设置上拉下拉刷新的样式
recyclerview.setrefreshprogressstyle(progressstyle.ballspinfadeloader);
recyclerview.setloadingmoreprogressstyle(progressstyle.ballrotate);
recyclerview.setarrowimageview(r.drawable.iconfont_downgrey);设置头部
recyclerview
.getdefaultrefreshheaderview()
.setrefreshtimevisible(true);
view header = layoutinflater.from(this).inflate(r.layout.recyclerview_header,(viewgroup)findviewbyid(android.r.id.content),false);
recyclerview.addheaderview(header);设置上下拉的文字提示语
// recyclerview.getdefaultfootview().setloadinghint("自定义加载中提示");
recyclerview.getdefaultfootview().setnomorehint("自定义加载完毕提示");设置刷新的回调(onrefrsh为刷新回调,onloadmore为下拉更新)
recyclerview.setloadinglistener(new xrecyclerview.loadinglistener() {
@override
public void onrefresh() {
new handler().postdelayed(new runnable(){
public void run() {
internextdata(2);
}
}, 2000);
}
@override
public void onloadmore() {
}
});更新完毕
lists.clear(); lists.addall( readalllock.arraydemofromdata(body)); adapter.notifydatasetchanged(); recyclerview.refreshcomplete();
实战过程
默认初级进入页面的时候先加载好数据使我们的网络请求函数,多加上一个参数区分 初始化网络 下拉刷新 下拉添加数据的操作
彩蛋
顺便讲一下一点更新数据的问题 ,使用下面语句来更新的时候我们必须更新我一初始化的数据内存,不能让引用指向另一内存
adapter.notifydatasetchanged();
我的案例
package com.ly.project.view;
import android.os.handler;
import android.support.v7.widget.linearlayoutmanager;
import android.support.v7.widget.recyclerview;
import android.support.v7.widget.staggeredgridlayoutmanager;
import android.util.log;
import android.view.layoutinflater;
import android.view.view;
import android.view.viewgroup;
import android.widget.toast;
import com.ly.basemodule.essential.basetemplate.baseactivity;
import com.ly.project.adapter.demoadapter;
import com.ly.project.adapter.mylockadapter;
import com.ly.project.controller.lockcontroller;
import com.ly.project.manager.interfacemanger;
import com.ly.project.module.readalllock;
import com.ly.project.r;
import com.ly.project.utils.retrofitutils;
import com.google.gson.gson;
import com.google.gson.jsonarray;
import com.google.gson.jsonelement;
import com.google.gson.jsonparser;
import com.jcodecraeer.xrecyclerview.progressstyle;
import com.jcodecraeer.xrecyclerview.xrecyclerview;
import java.util.arraylist;
import java.util.hashmap;
import java.util.list;
import java.util.map;
import okhttp3.multipartbody;
import okhttp3.requestbody;
/**
* created by jie on 2018/8/17.
*/
public class demo extends baseactivity {
list<readalllock> lists = new arraylist<>();
private xrecyclerview recyclerview;
private demoadapter adapter;
@override
public int getlayoutid() {
return r.layout.demo;
}
@override
public void initviews() {
recyclerview = findview(r.id.rv);
initr();
}
/**
* 初始化控件
*/
private void initr() {
/*
* 默认为垂直向下的列表格式
*/
linearlayoutmanager layoutmanager = new linearlayoutmanager(getapplication());
/**
* 设置为水平布局格式
*/
// layoutmanager.setorientation(linearlayoutmanager.horizontal);
/*
* 瀑布格式
* 第一个参数表示布局的列数
* 第二个参数表示布局的方向,这里我们传入staggeredgridlayoutmanager.vertical,表示布局纵向排列
*/
// staggeredgridlayoutmanager layoutmanager = new staggeredgridlayoutmanager(2, staggeredgridlayoutmanager.vertical);
//设置recyclerview 布局
recyclerview.setlayoutmanager(layoutmanager);
recyclerview.setpullrefreshenabled(true);
recyclerview.setloadingmoreenabled(false);
recyclerview.setrefreshprogressstyle(progressstyle.ballspinfadeloader);
recyclerview.setloadingmoreprogressstyle(progressstyle.ballrotate);
recyclerview.setarrowimageview(r.drawable.iconfont_downgrey);
recyclerview
.getdefaultrefreshheaderview()
.setrefreshtimevisible(true);
view header = layoutinflater.from(this).inflate(r.layout.recyclerview_header, (viewgroup)findviewbyid(android.r.id.content),false);
recyclerview.addheaderview(header);
// recyclerview.getdefaultfootview().setloadinghint("自定义加载中提示");
recyclerview.getdefaultfootview().setnomorehint("自定义加载完毕提示");
}
/**
* 初始化点击事件
*/
@override
public void initlistener() {
recyclerview.setloadinglistener(new xrecyclerview.loadinglistener() {
@override
public void onrefresh() {
new handler().postdelayed(new runnable(){
public void run() {
internextdata(2);
}
}, 2000);
}
@override
public void onloadmore() {
}
});
}
/**
* 初始化数据
*/
@override
public void initdata() {
internextdata(1);
}
/**
* 获取数据
* @param type tyoe==1 初次获取数据 type == 2 刷新获取数据 type == 3 下拉更新数据
*/
private void internextdata(final int type) {
lockcontroller lockcontroller = new lockcontroller(demo.this);
list<string> photos = new arraylist<>();
list<multipartbody.part> parts = null;
map<string, requestbody> params = new hashmap<>();
params.put("phone", retrofitutils.converttorequestbody("17875305749"));
params.put("password", retrofitutils.converttorequestbody("1234567"));
lockcontroller.readalllock(params, parts, new interfacemanger.onrequestlistener() {
@override
public void onsuccess(object success) {
string body = success.tostring();
log.e("onsuccess:", body);
switch (type){
case 1:
lists = readalllock.arraydemofromdata(body);
//设置adapter
adapter = new demoadapter(lists);
adapter.setonitemclicklistener(new demoadapter.onitemclicklistener() {
@override
public void onlongclick(int position) {
toast.maketext(demo.this, "onlongclick事件 您点击了第:" + position + "个item", toast.length_short).show();
}
@override
public void onclick(int position) {
toast.maketext(demo.this, "onclick事件 您点击了第:" + position + "个item", toast.length_short).show();
}
});
recyclerview.setadapter(adapter);
recyclerview.refresh();
break;
case 2:
lists.clear();
lists.addall( readalllock.arraydemofromdata(body));
adapter.notifydatasetchanged();
recyclerview.refreshcomplete();
break;
default:
break;
}
}
@override
public void onerror(string error) {
showtoast(error);
}
@override
public void oncomplete() {
}
});
}
@override
public void processclick(view v) {
}
}到此这篇关于android 之 xrecyclerview的使用的文章就介绍到这了,更多相关android xrecyclerview使用内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论