PullToRefreshListView的使用
public class MainActivity extends Activity {
//MENU itemid
/**手动执行刷新*/
static final int MENU_MANUAL_REFRESH = 0;
/** 数据加载中是否允许滑动*/
static final int MENU_DISABLE_SCROLL = 1;
/**刷新模式,
* 包括{
* 1.DISABLED(0x0) 禁止通过手势和手动执行
* 2.PULL_FROM_START(0x1) 可执行下拉刷新
* 3.PULL_FROM_END(0x2) 可执行上拉刷新
* 3.BOTH(0x3) 上下都可执行
* 4.MANUAL_REFRESH_ONLY(0x4) 禁止通过手势执行,但可以手动设置
* }*/
static final int MENU_SET_MODE = 2;
//MENU itemid end
/**这里我们来判断是下拉还是上拉*/
private PullToRefreshBase.Mode CurrentMode;
private LinkedList<String> mListItems;
private PullToRefreshListView mPullRefreshListView;
private ArrayAdapter<String> mAdapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ptr_list);
mPullRefreshListView = (PullToRefreshListView) findViewById(R.id.pull_refresh_list);
//监听列表被刷新时事件.
mPullRefreshListView
.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener<ListView>() {
@Override
public void onRefresh(
PullToRefreshBase<ListView> refreshView) {
int flags=DateUtils.FORMAT_SHOW_TIME
| DateUtils.FORMAT_SHOW_DATE
| DateUtils.FORMAT_ABBREV_ALL;
String label = DateUtils.formatDateTime(
getApplicationContext(),
System.currentTimeMillis(),flags
);
CurrentMode=refreshView.getCurrentMode();
// 更新最后刷新时间
refreshView.getLoadingLayoutProxy()
.setLastUpdatedLabel(label);
// 执行加载更多数据任务.
new GetDataTask().execute();
}
});
//监听滑动到底部的事件
mPullRefreshListView
.setOnLastItemVisibleListener(new PullToRefreshBase.OnLastItemVisibleListener() {
@Override
public void onLastItemVisible() {
Toast.makeText(MainActivity.this,
"已到列表底部!", Toast.LENGTH_SHORT).show();
}
});
ListView actualListView = mPullRefreshListView.getRefreshableView();
mListItems = new LinkedList<String>();
mListItems.addAll(Arrays.asList(mStrings));
mAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, mListItems);
//这里可以根据状态的变化来添加声音事件
SoundPullEventListener<ListView> soundListener = new SoundPullEventListener<ListView>(
this);
soundListener.addSoundEvent(PullToRefreshBase.State.PULL_TO_REFRESH, R.raw.pull_event);
soundListener.addSoundEvent(PullToRefreshBase.State.RESET, R.raw.reset_sound);
soundListener.addSoundEvent(PullToRefreshBase.State.REFRESHING,
R.raw.refreshing_sound);
mPullRefreshListView.setOnPullEventListener(soundListener);
actualListView.setAdapter(mAdapter);
}
private class GetDataTask extends AsyncTask<Void, Void, String[]> {
@Override
protected String[] doInBackground(Void... params) {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
}
return mStrings;
}
@Override
protected void onPostExecute(String[] result) {
//这里是提供给我们比较MODE的方法,返回0则表示相当
if (CurrentMode.compareTo(PullToRefreshBase.Mode.PULL_FROM_START)==0) {
mListItems.addFirst("+下拉新增数据");
}else {
mListItems.addLast("+上拉新增数据");
}
mAdapter.notifyDataSetChanged();
//当数据加载完成,需要调用onRefreshComplete.
mPullRefreshListView.onRefreshComplete();
super.onPostExecute(result);
}
}
/**
* 此方法只在初次加载时调用
*/
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(0, MENU_MANUAL_REFRESH, 0, "手动刷新");
menu.add(
0,
MENU_DISABLE_SCROLL,
1,
mPullRefreshListView.isScrollingWhileRefreshingEnabled() ? "加载中禁止滑动"
: "加载中可滑动");
menu.add(
0,
MENU_SET_MODE,
0,
mPullRefreshListView.getMode() == PullToRefreshBase.Mode.BOTH ? "模式:下拉刷新"
: "模式:上下拉刷新");
return super.onCreateOptionsMenu(menu);
}
/**
* 此方法每次点击都会调用
*/
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
MenuItem disableItem = menu.findItem(MENU_DISABLE_SCROLL);
disableItem
.setTitle(mPullRefreshListView
.isScrollingWhileRefreshingEnabled() ? "加载中禁止滑动"
: "加载中可滑动");
MenuItem setModeItem = menu.findItem(MENU_SET_MODE);
setModeItem
.setTitle(mPullRefreshListView.getMode() == PullToRefreshBase.Mode.BOTH ? "模式:下拉刷新"
: "模式:上下拉刷新");
return super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case MENU_MANUAL_REFRESH:
new GetDataTask().execute();
mPullRefreshListView.setRefreshing(false);
break;
case MENU_DISABLE_SCROLL:
mPullRefreshListView
.setScrollingWhileRefreshingEnabled(!mPullRefreshListView
.isScrollingWhileRefreshingEnabled());
break;
case MENU_SET_MODE:
mPullRefreshListView
.setMode(mPullRefreshListView.getMode() == PullToRefreshBase.Mode.BOTH ? PullToRefreshBase.Mode.PULL_FROM_START
: PullToRefreshBase.Mode.BOTH);
break;
}
return super.onOptionsItemSelected(item);
}
private String[] mStrings = { "当前数据", "当前数据", "当前数据", "当前数据", "当前数据",
"当前数据", "当前数据", "当前数据", "当前数据", "当前数据",
"当前数据", "当前数据", "当前数据", "当前数据", "当前数据",
"当前数据", "当前数据", "当前数据", "当前数据", "当前数据" };
}
PullToRefreshListView的使用的更多相关文章
- pullToRefreshListView的简单使用
1.加入library后直接布局 library下载地址:http://pan.baidu.com/s/1dFJu8pF <com.handmark.pulltorefresh.library. ...
- PullToRefreshListView加载更多定位的解决方法
之前项目里,早起用到了PullToRefreshListView,后来一部分用到了RefreshListView,最近在做优化的时候,其中一个问题就是PullToRefreshlistView上拉加载 ...
- RecyclerView和PullToRefreshListView的对比
项目中上拉刷新和下拉加载一直都是比较常见的:以前一般都是重写ListView或直接用PullToRefreshListView的框架:最近尝试用RecyclerView来实现下拉加载上拉刷新也是不错的 ...
- ListView、PullToRefreshListView滑动加载可见item
最近用的了PullToRefreshListView框架,也在listView中加载图片,对于滑动加载可见item,网上找了一些相关文档,但都不太合适,如:http://blog.csdn.net/z ...
- Android PullToRefreshListView上拉刷新和下拉刷新
PullToRefreshListView实现上拉和下拉刷新有两个步骤: 1.设置刷新方式 pullToRefreshView.setMode(PullToRefreshBase.Mode.BOTH) ...
- Android ScrollView+ViewPager+PullToRefreshListView
想达到此界面的风格 然后ViewPage里面第一个Fragment是一个瀑布流 这个瀑布流要有加载跟多 在ScrollView中,嵌套ViewPager,在ViewPager的每页使用Fragment ...
- PullToRefreshListView调用onRefreshComplete方法 无法取消刷新的bug
我们在使用框架: PullToRefreshListView 实现下拉或者上拉加载时候,可能在上拉 完成时候,调用onRefreshComplete方法去 停止 刷新操作,但是,可能无效,测试产生 ...
- 95秀-PullToRefreshListView 示例
正在加载.暂无数据页面 public class RefreshGuideTool { private RelativeLayout rl_loading_guide;//整个View ...
- PullToRefreshListView组件的OnItemClickListener中的position下标问题
/** * Pass-through method for {[url=home.php?mod=space&uid=91636]@link[/url] PullToRefreshBase#g ...
随机推荐
- Linux3 在VMware中搭建CentOS6.5虚拟机
前言: 本文主要是我在大家hadoop集群之前 ,需啊先安装CentOS虚拟机,记录在此,作为参考.如果能帮助到其他人,自然是更好啦. =========================== ...
- Vue.js——基于$.ajax实现数据的跨域增删查改
概述 之前我们学习了Vue.js的一些基础知识,以及如何开发一个组件,然而那些示例的数据都是local的.在实际的应用中,几乎90%的数据是来源于服务端的,前端和服务端之间的数据交互一般是通过ajax ...
- Nova PhoneGap框架 第一章 前言
Nova PhoneGap Framework诞生于2012年11月,从第一个版本的发布到现在,这个框架经历了多个项目的考验.一直以来我们也持续更新这个框架,使其不断完善.到现在,这个框架已比较稳定了 ...
- ASP.NET MVC Model验证(三)
ASP.NET MVC Model验证(三) 前言 上篇中说到在MVC框架中默认的Model验证是在哪里验证的,还讲到DefaultModelBinder类型的内部执行的示意图,让大家可以看到默认的M ...
- Entity Framework 与 面向对象
说要分享,我了个*,写了一半放草稿箱了两个星期都快发霉了,趁着周末写完发出来吧. 文章分为五部分: 基础.类讲述的是用到的一些EF与面向对象的基础: 业务是讲怎么划分设计业务: 设计模式和工作模式讲述 ...
- C# OracleDBhelper
引用 using System.Configuration;using System.Data.OracleClient; 连接字符串 <connectionStrings> <ad ...
- selenium自动化基础知识
什么是自动化测试? 自动化测试分为:功能自动化和性能自动化 功能自动化即使用计算机通过编码的方式来替代手工测试,完成一些重复性比较高的测试,解放测试人员的测试压力.同时,如果系统有不份模块更改后,只要 ...
- C++多态详解
多态是面向对象的程序设计的关键技术.多态:调用同一个函数名,可以根据需要但实现不同的功能.多态体现在两个方面,我们以前学过的编译时的多态性(函数重载)和现在我们这一章将要学习的运行时的多态性(虚函数) ...
- 生成任意长度的随机数 JS
1.Math.random().toString(36).substr(2); 结果:ywv6cnpkliahj4tep0 2. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...
- geotrellis使用(二十七)栅格数据色彩渲染
目录 前言 复杂原因及思路分析 实现过程 总结 一.前言 今天我们来研究一下这个看似简单的问题,在地理信息系统中颜色渲染应当是最基本的操作和功能,比如我们将一幅Landsat数据拖拽到A ...