关闭

PtrManager 帮你省掉所有的复杂代码

196人阅读 评论(1) 收藏 举报
分类:

五月份还没有更新博客呢,今天写了一个PtrManager,分享一下


/**
 * Created by Sky on 2017/5/10 0010.
 * <p>
 * PtrManager用作更新Ptr中的数据,及对RefreshLoadMore状态的还原
 * 需要传入一个初始化好的adapter
 * 如果需要onItemClickListener需要提前使用adapter.setOnItemClickListener()
 * 然后再将adapter作为参数去实例化PtrManager对象
 * <p>
 * 至于Ptr控件的RefreshLoadMore方法需要在外部去灵活使用,这里不作考虑
 * <p>
 * 拓展使用:
 * 修改ptr控件类名及对应方法以及Adapter
 * <p>
 * 外部调用:
 * this.pageCurrent = ptrManager.FillPtr(datas,this.pageCurrent);
 */

public class PtrManager<T> {
    private PullRefreshListView ptr;
    //Adapter需要先实例化,数据为空即可
    private BaseAdapter<T> adapter;
    private int pageCurrent;
    private int pageCount;

    /**
     * pageCount发生改变时(即数据源发生变化) 不需要去重新实例化对象 直接对其pageCount重新赋值
     * 并在下次FillPtr()的时候,pageCurrent参数传入1
     */
    public void setPageCount(int pageCount) {
        this.pageCount = pageCount;
    }


    /**
     * 重新初始化PtrManager的方法
     * 用作选项卡的切换后 考虑到item的布局可能发生改变,即需要一个新的adaper去替换掉旧的,同时传入新的pageCount
     * 外部调用这个方法之后再同往常一样去调用FillPtr()方法即可
     */
    public void initManager(BaseAdapter<T> adapter, int pageCount) {
        this.adapter = adapter;
        this.pageCount = pageCount;
    }

    public PtrManager(PullRefreshListView ptr, BaseAdapter<T> adapter, int pageCount) {
        this.ptr = ptr;
        this.pageCount = pageCount;
        this.adapter = adapter;
    }

    //返回pageCurrent
    public int FillPtr(List<T> datas, int pageCurrent) {
        this.pageCurrent = pageCurrent;
        if (this.pageCurrent > this.pageCount) {
            this.pageCurrent = this.pageCount;
            PtrComplete();
            ptr.setCanLoadMore(false);
            return this.pageCurrent;
        } else if (this.pageCurrent == this.pageCount) {
            ptr.setCanLoadMore(false);
        }
        if (this.pageCurrent == 1) {
            adapter.clearData();
            adapter.addAllData(datas);
            ptr.setAdapter(adapter);
        } else {
            adapter.addAllData(datas);
            adapter.notifyDataSetChanged();
        }
        PtrComplete();
        if (this.pageCurrent == this.pageCount) {
            ptr.setCanLoadMore(false);
        }
        return this.pageCurrent;
    }

    private void PtrComplete() {
        ptr.onRefreshComplete(null);
        ptr.onLoadMoreComplete();
    }
}


泛型是数据源的类型,外部这样去调用


manager = new PtrManager<>(listview, adapter, pageCount);
pageCurrent = manager.FillPtr(data, 1);

在接口onResponse里这样去优化


pageCount = response.getTotal();
data = response.getData();
if (pageCurrent == 1) {
    if (manager == null) {
        //第一次加载
        manager = new PtrManager<>(listview, adapter, pageCount);
    }else{
        //第二次刷新 可能加入了筛选等条件 pageCount可能发生改变
        manager.setPageCount(pageCount);
    }
}
pageCurrent = manager.FillPtr(data, pageCurrent);



1
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

【经验交流】我为什么要帮你?

我为什么要帮你
  • feilusia
  • feilusia
  • 2015-07-27 11:38
  • 3753

ios phonegap入门,可以帮你省掉不少麻烦

关于cordova,由于版本差异,cordova给我们留了太多的坑需要我们一个一个发现并将其填好,一把铲子显得尤为重要了。本文是以填坑为目的,献给那些想要学习cordova的入门者。
  • ikceo1211
  • ikceo1211
  • 2017-04-24 13:13
  • 169

Java用观察者模式重构复杂的业务代码

1. 定义一个统一的回调接口 public interface CallerInter { void call(Param param); } 2. 定义观察者接口 public inte...
  • u011734144
  • u011734144
  • 2016-08-19 16:50
  • 686

专业程序员必知必会的技巧:驯服复杂代码

你从入职第一天起就要应对复杂代码。 若是还未遇到过无法理解的程序,那说明你编程的年头还不够长。在行业里,要不了多久你就会碰到让人发懵的混乱代码:巨兽、面条工厂、来自地狱的遗留系统。我曾接手过一个...
  • hzbooks
  • hzbooks
  • 2013-03-07 16:15
  • 31418

信手拈来按键帮你来 4.8.0001 最新版发布

信手拈来按键帮你来 3.0 主程序下载: 内含 8部 菜鸟 快速 上手语音视频讲解+AHK主程序+SciTE编辑器(含自带的工具) ,故此文件有点大 ,7Z打包 (580.37MB)MD5:2aed...
  • lovedeadyou
  • lovedeadyou
  • 2017-10-06 09:18
  • 314

Java 复杂计算器的实现

已经两次有公司面试上机,做这个题目,下面说一下实现思路。   要求:给予的字符串是标准可以做有效运算的字符串,只包含加减乘除和数字,其中最前和最后是数字 思路:先把字符串以运算符进行分割,把数字...
  • cuisuqiang
  • cuisuqiang
  • 2014-11-13 16:19
  • 849

你真的了解人工智能吗?——聊聊AI的碰壁和冬天

转自: http://mp.weixin.qq.com/s?__biz=MzI1NDE1MDUwOQ==&mid=402568726&idx=1&sn=ea0fc89efb253d54b02d1a4...
  • hellonlp
  • hellonlp
  • 2016-03-22 10:50
  • 1609

DNS配置:设置Host文件或DNS

在浏览器上浏览虚拟主机,必须使用Hosts文件或域名系统(DNS)实现主机名到IP地址的解析。在局域网中用Hosts文件或DNS都可以,在Internet上只能用DNS了。    1.Hosts...
  • IwenTechnology
  • IwenTechnology
  • 2017-04-23 00:26
  • 164

用微信小程序开店之二——Hello 小程序

第二讲:我的第一个微信小程序
  • robinfish337
  • robinfish337
  • 2017-08-03 08:48
  • 584

让插件帮你优化代码

对代码审查研究有一段时间,觉得代码审查并不是一个一触而就的工作,对于一个适应了快速开发而缺少代码审查的团队来说,突然让他们花时间去审查别人的代码,我想很多人都会存在抵制情绪,也不知该如何下手,这样无疑...
  • viviju1989
  • viviju1989
  • 2013-01-23 00:02
  • 336
    个人资料
    • 访问:24437次
    • 积分:712
    • 等级:
    • 排名:千里之外
    • 原创:41篇
    • 转载:33篇
    • 译文:1篇
    • 评论:8条
    文章分类
    最新评论