android-ultra-pull-to-refresh list,[Android]Ultra-Pull-To-Refresh之listview下拉刷新、上拉加载的用例...
前言
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下拉刷新、上拉加载的用例...相关推荐
- android 列表上拉加载更多,Android 下拉刷新,上拉加载更多控件–支持ListView,GridView和ScrollView...
麦洛遇到这样一个需求,实现类似于IOS下拉刷新,上拉加载更多的控件.麦洛google,baidu了一番,网上有不少实现,比较常见的是国外牛人的实现,不过国外的实现基本上都是扩展于ListView,所以 ...
- Android 自定义 ListView 上下拉动“刷新最新”和“加载更多”歌曲列表
本文内容 环境 测试数据 项目结构 演示 参考资料 本文演示,上拉刷新最新的歌曲列表,和下拉加载更多的歌曲列表.所谓"刷新最新"和"加载更多"是指日期.演示代码 ...
- Android自定义控件实战——实现仿IOS下拉刷新上拉加载 PullToRefreshLayout
下拉刷新控件,网上有很多版本,有自定义Layout布局的,也有封装控件的,各种实现方式的都有.但是很少有人告诉你具体如何实现的,今天我们就来一步步实现自己封装的 PullToRefreshLayout ...
- android listview下拉刷新动画,android 安卓 listview 支持下拉刷新 上拉加载更多
[1]重写listViewimport java.text.SimpleDateFormat; import java.util.Date; import com.example.testdddlea ...
- Android 下拉刷新上拉载入 多种应用场景 超级大放送(上)
转载请标明原文地址:http://blog.csdn.net/yalinfendou/article/details/47707017 关于Android下拉刷新上拉载入,网上的Demo太多太多了,这 ...
- Android ListView 实现下拉刷新上拉加载
转载请注明出处:http://blog.csdn.net/allen315410/article/details/39965327 1.简介 无疑,在Android开发中,ListView是使用非常频 ...
- Android 下拉刷新上拉加载可以左右滑动
下面是下拉刷新上拉加载可以左右滑动的实例,下面是效果图: GitHub 下载地址:https://github.com/wuqingsen/MySlidingNested CSDN 下载地址:http ...
- Android 下拉刷新上拉加载 多种应用场景 超级大放送(上)
转载请标明原文地址:http://blog.csdn.net/yalinfendou/article/details/47707017 关于Android下拉刷新上拉加载,网上的Demo太多太多了,这 ...
- Android滑动冲突解决方式(下拉刷新上拉加载更多,适配RecyclerView/ListView/ScrollView)
一.Android事件的分发机制 这里需要了解下Andorid事件的分发机制.事件分发一般是针对一组事件,即ACTION_DOWN > ACTION_UP 或 ACTION_DOWN > ...
- Android下拉刷新上拉更多瀑布流(附源码)
关于瀑布流,我相信有很多朋友经常会用到.但是呢我们经常也会遇到这个问题,比如瀑布流不能下拉刷新,或者上拉更多,有的是一个简单的touch事件监听上拉加载更多,但是很显然,这样的功能以及用户体验得不到提 ...
最新文章
- php 企业微信指令回调借款_企业微信外部联系人回调事件
- 几个SQL命令的使用
- 深入浅出:Linux设备驱动之字符设备驱动
- 网站添加自己公司的地图(使用的百度地图)时只显示一个空白框
- Hyperledger Fabric 管道(2) 管道的操作
- TextBox和DataGridView控件的事件发生顺序
- 16行代码AC——例题6-4破损的键盘(Broken Keyboard,UVa 11988)——解题报告
- 《子弹笔记术》[日]杉野干人(作者)epub+mobi+azw3格式下载
- oracle ebs 安装教程,Oracle_EBS_系统安装以及维护.doc
- Python菜鸟入门:day08函数概念
- spring boot 使用application.properties 进行外部配置
- 袁永福的博客系列文章链接集合
- 各计算机系统用传输介质互连,计算机网络技术与应用.doc
- axure html图标 图片大小,Axure 图标解决方案_html/css_WEB-ITnose
- 【JY】浅析消能附加阻尼比
- TI DSP各种库文件
- 使用Machin公式计算
- 2018.08.21 bzoj4668: 冷战(并查集+启发式合并)
- CCS7.3安装,关闭win10家庭版自带杀毒
- Python之任意阶幻方的构造
热门文章
- vant 做表格_Vant List 列表
- arm Linux 中断管理机制
- Bootloader详解
- Cpp 对象模型探索 / 编译器为对象创建缺省构造函数的条件
- KEIL、uVision 和 MDK 区别和联系
- mysql scope runtime_Maven依赖scope属性详解-一个报错引发的问题 - 老郭种树
- 计算机权限常用英语词汇,计算机英语-计算机常用英语词汇表讲课稿.pdf
- 华为真的注册鸿蒙,“鸿蒙”真的来了!华为注册了整本山海经?
- 51单片机学习笔记(郭天祥版)(9)——IIC、EEPROM
- [转]在WPF中自定义控件 UserControl