public abstract class MyBaseAdapter<T> extends BaseAdapter {protected List<T> list;
   //普通条目
   private static final int LIST_ITEM=0;
   //加载更多条目
   private static final int LOAD_MODR=1;
   private MoreHolder moreholder;
   public MyBaseAdapter(List<T> list) {this.list = list;
   }public List<T> getList(){return list;
   }@Override
   public int getCount() {return list.size()+1;
   }public int getListSize(){return list.size();
   }@Override
   public Object getItem(int position) {return list.get(position);
   }@Override
   public long getItemId(int position) {return position;
   }@Override
   public int getViewTypeCount() {return super.getViewTypeCount()+1;
   }@Override
   public int getItemViewType(int position) {if(position==getCount()-1){return LOAD_MODR;
      }else {return getInnerItemType(position);
      }}/**
    * 子类可覆盖此方法用于listitem有多个 条目的情况
    */
   public int getInnerItemType(int position) {return LIST_ITEM;
   }@Override
   public View getView(int position, View convertView, ViewGroup parent) {BaseHolder holder = null;
      if (convertView == null) {if(getItemViewType(position)==LOAD_MODR){holder=getMoreHolder();
         }else{holder=getHolder();
         }}else{holder=(BaseHolder)convertView.getTag();//固定的
       }if(getItemViewType(position)==LIST_ITEM){holder.setData(list.get(position));
      }return holder.getRootView();
   }/**
    * 返回加载更多的holder
    * @return
    */
   private MoreHolder getMoreHolder() {if(moreholder==null) //避免重复创建对象
         moreholder = new MoreHolder(isHasMore(),this);
      return moreholder;
   }/**
    * 设置是否还有数据的状态 默认有数据  可以给子类覆盖 如果不需要从服务器获取数据的话
    * @return
    */
   public Boolean isHasMore() {return true;
   }public abstract BaseHolder<T> getHolder();
   /**
    * 根据访问网络获取的结果改变MoreHolder的状态  此处处理业务逻辑 具体的访问网络的请求地址..不确定 所以使用抽象 让子类去实现
    */
   public void loadMore() {ThreadManager.getThreadPoolProxy().execute(new RunnableTask());
   }class RunnableTask implements Runnable{@Override
      public void run() {//访问网络返回的数据  是一般条目
         final List<T> more_list=onLoad();//加载网络获取的路径未知所有抽象
         // 如果假定服务器一次返回的数据是二十条
         //那么就有三种状态 1服务器返回少于20条 那么代表服务器没有更多数据了 将状态置为NO_MORE
         //2服务器返回20 条 那么还有更多数据 HAS_MORE
         //3服务器请求失败 LOAD_ERROR
         //更新ui在使用UIUTils
         UIUtils.runInMainThread(new Runnable() {@Override
            public void run() {if (more_list != null) {if (more_list.size() == 20) {moreholder.setData(MoreHolder.LOAD_MORE);
                  }if (more_list.size() < 20) {moreholder.setData(MoreHolder.NO_MORE);
                  }} else {moreholder.setData(MoreHolder.LOAD_ERROR);
               }if (more_list != null) {//将数据加入到当前listview的集合中
                  list.addAll(more_list);
                  notifyDataSetChanged();//更新ListView
               }}});
      } }/**
    * 访问网络获取更多的数据
    * @return
    */
   public abstract List<T> onLoad();
}
public abstract class BaseHolder<T> {private View view;
   private T data;

   protected BaseHolder() {view = initView();
      view.setTag(this);
   }public void setData(T data) {this.data = data;
      setData2View();
   }public T getData() {return data;
   }public View getRootView() {return view;
   }public abstract void setData2View();

   public abstract View initView();
}

万能设配器代码 带加载更多相关推荐

  1. dede文章异步ajax加载,织梦DedeCMS列表“加载更多”“无限下拉”Ajax加载使用方法...

    Infinite Ajax Scroll 简称 ias,无限的ajax滚动,是一款jQuery滚动ajax分页插件,当页面滚动到容器可见部分将自动异步加载数据. 下面先来看看效果. 无限下拉效果 点击 ...

  2. php底部加载更多,关于vue底部加载更多的代码

    本文通过实例代码给大家介绍了vue底部加载更多,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下 要实现的效果如下: {{showDay(index)}} {{item.title ...

  3. html加载更多实现代码,如何实现点击“加载更多”?

    看你的样子用的应该是java写的后端(, ...).为了实现加载更多,其实就是点击按钮后在不刷新页面的情况下添加更多的内容显示到当前页面中.用ajax拉取数据,前提是后端能够根据条件(例如:页号.分类 ...

  4. RecyclerView 自带的上拉加载更多

    RecyclerView 大家肯定很熟悉,平常使用的时候也难免会遇到下拉刷新和上拉加载更多,网上相关的控件也是多如牛毛.我特别期待谷歌什么时候能够自己开发一个,可惜一直到现在,也只有一个SwipeRe ...

  5. android 刷新某条数据_Android 支持刷新、加载更多、带反弹效果的RecyclerView

    点击上方"Android技术杂货铺",选择"标星" 干货文章,第一时间送达! 开篇 当前市面上很多支持刷新.加载更多RecyclerView开源库,为何我这里还 ...

  6. android 加载更多动画效果,Android实践之带加载效果的下拉刷新上拉加载更多

    前言 之前写的一个LoadingBar,这次把LoadingBar加到下拉刷新的头部.从头写一个下拉刷新,附赠上拉加载更多.下面话不多说了,来一起看看详细的介绍吧. 效果图: 实现过程 首先是自定义属 ...

  7. android 底部加载更多,android:ScrollView滑动到底部显示加载更多(示例代码)

    这是效果 主要是onTouchListener监听事件,监视什么时候滑到底部 同时要理解getMeasuredHeight和getHeight的区别 getMeasuredHeight:全部的长度 包 ...

  8. BaseRecyclerViewAdapterHelper源码解读(四) 上拉加载更多

    上拉加载 上拉加载无需监听滑动事件,可自定义加载布局,显示异常提示,自定义异常提示. 此篇文章为BaseRecyclerViewAdapterHelper源码解读第四篇,开源库地址,如果没有看过之前3 ...

  9. Android下拉刷新和上拉加载更多

    Android下拉刷新和上拉加载更多 下拉刷新 通过android系统提供的组件:SwipeRefreshLayout 一.基本使用 1 xml中 添加 SwipeRefreshLayout 组件 该 ...

最新文章

  1. flink 三种时间机制_360深度实践:Flink 与 Storm 协议级对比
  2. Net平台下的分布式缓存设计
  3. Linux环境部署jenkins
  4. 无法从套接字读取更多的数据 oracle_小伙面试时被追问数据库优化,面试前如何埋点反杀?
  5. android one s5,消费者报告:Galaxy S5比S6更值得购买
  6. 今天执行grep命令差点把服务器搞崩
  7. Selenium-WebDriver驱动对照表
  8. Python 搜狗词库的批量下载
  9. Sql基本语句增删改查
  10. ICO走进华盛顿:国会探讨加密货币,有什么可以期待?
  11. 搬运:PHOTOSHOP存储为 Web 所用格式的选项|处理PNG图像透明度时的仿色选项
  12. #从焦虑到从容,不吼不叫养出好孩子-02做懂得沟通的父母-带着爱与慈悲来表达需求
  13. Poi解析对比excel表格
  14. 解决问题:使用cv2.imshow/plt.imshow显示图片正常,但保存下来的图片不正常或者全黑
  15. MATLAB画曲线图
  16. 淘宝里面的data-spm-anchor-id属性有什么用?
  17. 4. 多重背包问题 I
  18. win10如何设置某软件为系统默认程序(应用)?
  19. AM335X BeagleBone 之格式化SD卡
  20. access 分组序号_ACCESS分组查询

热门文章

  1. 戏说数据仓库,商业智能BI中数据仓库的本质是什么?
  2. 华为-IGP协议-ospf精简篇(带实验验证)
  3. 2022全国水下机器人大赛国际线上赛来啦!“水下感知赛、通信赛”等你来战!
  4. PHP 获取青果教务的验证码与登录,成绩查询
  5. React项目中请求跨域解决方法
  6. Android - 分屏模式(多窗口模式)
  7. 谷歌创始人布林申请离婚:身价930亿美元 曾出轨前妻闺蜜
  8. 保存图片到相册并打开微信扫一扫
  9. 使用讯飞语音识别的空指针错误
  10. linux 清除bios 密码吗,如何设置/清除 BIOS 硬盘密码