android 中的 xrecyclerview的使用案例-kb88凯时官网登录

来自:网络
时间:2024-06-09
阅读:
免费资源网,https://freexyz.cn/

前言:

我们在上一篇文章中学到了recyclerview但是在现实中往往需求不是那么的简单,可能需要多种需求合并起来,例如常见的上下拉刷新,删除 item 还有多种item,有着头部和尾部等等之类的。这次我们久来学习一个recyclerview的库,xrecyclerview的他集合了众多的功能,下面就让我来讲解一下如何使用。

步骤:

  • 引用 库
  • 创建 控件
  • 下拉刷新
  • 设置上拉下拉刷新的样式
  • 创建头部
  • 设置上下拉的文字提示语
  • 设置刷新的回调
  • 更新完毕
  • 实战过程
  • 彩蛋
  • 我的案例

引用库

    compile 'com.jcodecraeer:xrecyclerview:1.5.8'

创建控件



    

设置是否可以上下拉刷新(默认是可以的)

             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 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 photos = new arraylist<>();
        list parts = null;
        map 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) {
    }
}
免费资源网,https://freexyz.cn/
返回顶部
顶部
网站地图