前言

app中最常见的场景莫过于下拉刷新和自动加载的功能了,最经典的开源组件就是

本次demo的编辑环境为android studio,java1.8

截图

使用

1.本示例依赖jar如下:

dependencies {

compile fileTree(dir: 'libs', include: ['*.jar'])

compile 'com.android.support:appcompat-v7:23.1.1'

compile 'de.greenrobot:eventbus:2.4.0'

compile('in.srain.cube:ultra-ptr:1.0.9.1-SNAPSHOT@aar') {

exclude group: 'in.srain.cube', module: 'clog'

}

compile('in.srain.cube:cube-sdk:1.0.44.33-SNAPSHOT@aar') {

exclude group: 'in.srain.cube', module: 'clog'

}

}

2.xml中的内容:

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context="loadmore.example.jan.org.loadmoredemo.MainActivity">

android:id="@+id/load_more_list_view_ptr_frame"

android:layout_width="match_parent"

android:layout_height="match_parent">

android:id="@+id/load_more_list_view_container"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="@color/cube_mints_white">

android:id="@+id/load_more_listview"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:divider="@null"

android:fadingEdge="none"

android:listSelector="@android:color/transparent"

android:paddingLeft="12dp"

android:paddingRight="12dp"

android:scrollbarStyle="outsideOverlay" />

PtrClassicFrameLayout 是一个可以起到下拉刷新的实现的父类布局,而LoadMoreListViewContainer则是加载更多的布局控件。

3.MainActivity.java demo主要的代码实现,步骤和说明已注释

/**

* 利用android-Ultra-Pull-To-Refresh,上拉刷新和上拉加载的简单的dome

*/

public class MainActivity extends AppCompatActivity {

private PtrFrameLayout mPtrFrameLayout;

private LoadMoreListViewContainer mLoadMoreListViewContainer;

private ListView mListView;

private List mockStrList = new ArrayList<>();

private int start = 0;

private int count = 15;

private PagedListViewDataAdapter mAdapter;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//1.find the listview

mListView = (ListView) findViewById(R.id.load_more_listview);

// 为listview的创建一个headerview,注意,如果不加会影响到加载的footview的显示!

View headerMarginView = new View(this);

headerMarginView.setLayoutParams(new AbsListView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, LocalDisplay.dp2px(20)));

mListView.addHeaderView(headerMarginView);

//2.绑定模拟的数据

final ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, mockStrList);

mListView.setAdapter(adapter);

//3.设置下拉刷新组件和事件监听

mPtrFrameLayout = (PtrFrameLayout) findViewById(R.id.load_more_list_view_ptr_frame);

mPtrFrameLayout.setLoadingMinTime(1000);

mPtrFrameLayout.setPtrHandler(new PtrHandler() {

@Override

public boolean checkCanDoRefresh(PtrFrameLayout frame, View content, View header) {

// here check list view, not content.

return PtrDefaultHandler.checkContentCanBePulledDown(frame, mListView, header);

}

@Override

public void onRefreshBegin(PtrFrameLayout frame) {

//实现下拉刷新的功能

Log.i("test", "-----onRefreshBegin-----");

mPtrFrameLayout.postDelayed(new Runnable() {

@Override

public void run() {

mockStrList.clear();

start = 0;

mockStrList.addAll(getMockData(start, count));

mPtrFrameLayout.refreshComplete();

//第一个参数是:数据是否为空;第二个参数是:是否还有更多数据

mLoadMoreListViewContainer.loadMoreFinish(false, true);

adapter.notifyDataSetChanged();

}

}, 500);

}

});

//设置延时自动刷新数据

mPtrFrameLayout.postDelayed(new Runnable() {

@Override

public void run() {

mPtrFrameLayout.autoRefresh(false);

}

}, 200);

//4.加载更多的组件

mLoadMoreListViewContainer = (LoadMoreListViewContainer) findViewById(R.id.load_more_list_view_container);

mLoadMoreListViewContainer.setAutoLoadMore(true);//设置是否自动加载更多

mLoadMoreListViewContainer.useDefaultHeader();

//5.添加加载更多的事件监听

mLoadMoreListViewContainer.setLoadMoreHandler(new LoadMoreHandler() {

@Override

public void onLoadMore(LoadMoreContainer loadMoreContainer) {

//模拟加载更多的业务处理

mLoadMoreListViewContainer.postDelayed(new Runnable() {

@Override

public void run() {

start++;

mockStrList.addAll(getMockData(start * 10, count));

if (start * 10 > 30) {

// mLoadMoreListViewContainer.loadMoreFinish(true, false);

//以下是加载失败的情节

int errorCode = 0;

String errorMessage = "加载失败,点击加载更多";

mLoadMoreListViewContainer.loadMoreError(errorCode, errorMessage);

} else {

mLoadMoreListViewContainer.loadMoreFinish(false, true);

}

adapter.notifyDataSetChanged();

}

}, 1000);

}

});

}

/**

* 做一个简单的内容数据

* @param start 开始位置

* @param count 每次拉取的数量

* @return

*/

private List getMockData(int start, int count) {

List slist = new ArrayList();

for (int i = start; i < start + count; i++) {

slist.add("内容编号:" + i);

}

return slist;

}

} 基本就这样,还可以自己定义加载的ui.下次再写个demo试试吧。

android-ultra-pull-to-refresh list,[Android]Ultra-Pull-To-Refresh之listview下拉刷新、上拉加载的用例...相关推荐

  1. android 列表上拉加载更多,Android 下拉刷新,上拉加载更多控件–支持ListView,GridView和ScrollView...

    麦洛遇到这样一个需求,实现类似于IOS下拉刷新,上拉加载更多的控件.麦洛google,baidu了一番,网上有不少实现,比较常见的是国外牛人的实现,不过国外的实现基本上都是扩展于ListView,所以 ...

  2. Android 自定义 ListView 上下拉动“刷新最新”和“加载更多”歌曲列表

    本文内容 环境 测试数据 项目结构 演示 参考资料 本文演示,上拉刷新最新的歌曲列表,和下拉加载更多的歌曲列表.所谓"刷新最新"和"加载更多"是指日期.演示代码 ...

  3. Android自定义控件实战——实现仿IOS下拉刷新上拉加载 PullToRefreshLayout

    下拉刷新控件,网上有很多版本,有自定义Layout布局的,也有封装控件的,各种实现方式的都有.但是很少有人告诉你具体如何实现的,今天我们就来一步步实现自己封装的 PullToRefreshLayout ...

  4. android listview下拉刷新动画,android 安卓 listview 支持下拉刷新 上拉加载更多

    [1]重写listViewimport java.text.SimpleDateFormat; import java.util.Date; import com.example.testdddlea ...

  5. Android 下拉刷新上拉载入 多种应用场景 超级大放送(上)

    转载请标明原文地址:http://blog.csdn.net/yalinfendou/article/details/47707017 关于Android下拉刷新上拉载入,网上的Demo太多太多了,这 ...

  6. Android ListView 实现下拉刷新上拉加载

    转载请注明出处:http://blog.csdn.net/allen315410/article/details/39965327 1.简介 无疑,在Android开发中,ListView是使用非常频 ...

  7. Android 下拉刷新上拉加载可以左右滑动

    下面是下拉刷新上拉加载可以左右滑动的实例,下面是效果图: GitHub 下载地址:https://github.com/wuqingsen/MySlidingNested CSDN 下载地址:http ...

  8. Android 下拉刷新上拉加载 多种应用场景 超级大放送(上)

    转载请标明原文地址:http://blog.csdn.net/yalinfendou/article/details/47707017 关于Android下拉刷新上拉加载,网上的Demo太多太多了,这 ...

  9. Android滑动冲突解决方式(下拉刷新上拉加载更多,适配RecyclerView/ListView/ScrollView)

    一.Android事件的分发机制 这里需要了解下Andorid事件的分发机制.事件分发一般是针对一组事件,即ACTION_DOWN > ACTION_UP 或 ACTION_DOWN > ...

  10. Android下拉刷新上拉更多瀑布流(附源码)

    关于瀑布流,我相信有很多朋友经常会用到.但是呢我们经常也会遇到这个问题,比如瀑布流不能下拉刷新,或者上拉更多,有的是一个简单的touch事件监听上拉加载更多,但是很显然,这样的功能以及用户体验得不到提 ...

最新文章

  1. php 企业微信指令回调借款_企业微信外部联系人回调事件
  2. 几个SQL命令的使用
  3. 深入浅出:Linux设备驱动之字符设备驱动
  4. 网站添加自己公司的地图(使用的百度地图)时只显示一个空白框
  5. Hyperledger Fabric 管道(2) 管道的操作
  6. TextBox和DataGridView控件的事件发生顺序
  7. 16行代码AC——例题6-4破损的键盘(Broken Keyboard,UVa 11988)——解题报告
  8. 《子弹笔记术》[日]杉野干人(作者)epub+mobi+azw3格式下载
  9. oracle ebs 安装教程,Oracle_EBS_系统安装以及维护.doc
  10. Python菜鸟入门:day08函数概念
  11. spring boot 使用application.properties 进行外部配置
  12. 袁永福的博客系列文章链接集合
  13. 各计算机系统用传输介质互连,计算机网络技术与应用.doc
  14. axure html图标 图片大小,Axure 图标解决方案_html/css_WEB-ITnose
  15. 【JY】浅析消能附加阻尼比
  16. TI DSP各种库文件
  17. 使用Machin公式计算
  18. 2018.08.21 bzoj4668: 冷战(并查集+启发式合并)
  19. CCS7.3安装,关闭win10家庭版自带杀毒
  20. Python之任意阶幻方的构造

热门文章

  1. vant 做表格_Vant List 列表
  2. arm Linux 中断管理机制
  3. Bootloader详解
  4. Cpp 对象模型探索 / 编译器为对象创建缺省构造函数的条件
  5. KEIL、uVision 和 MDK 区别和联系
  6. mysql scope runtime_Maven依赖scope属性详解-一个报错引发的问题 - 老郭种树
  7. 计算机权限常用英语词汇,计算机英语-计算机常用英语词汇表讲课稿.pdf
  8. 华为真的注册鸿蒙,“鸿蒙”真的来了!华为注册了整本山海经?
  9. 51单片机学习笔记(郭天祥版)(9)——IIC、EEPROM
  10. [转]在WPF中自定义控件 UserControl