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 ...
随机推荐
- 如何安装并简单的使用OwinHost——Katana
微软OWIN的提出必然会引起一场风暴,而我们作为C#阵营中一份子,自然免不了会卷入其中.OWIN是什么东西,我在这里就不解析了,还不知道是OWIN是什么的读者请打开浏览器,然后搜索即可,中文的英文的应 ...
- C#分布式消息队列 EQueue 2.0 发布啦
前言 最近花了我几个月的业余时间,对EQueue做了一个重大的改造,消息持久化采用本地写文件的方式.到现在为止,总算完成了,所以第一时间写文章分享给大家这段时间我所积累的一些成果. EQueue开源地 ...
- 让ASP.NET接受有“潜在危险”的提交
什么是有“潜在危险”的提交?马上动手写个简单的例子: 用Visual Studio创建一个空白的ASP.NET MVC程序,一切默认即可,添加一个空白的HomeController,增加一个Ind ...
- useful commands for docker beginner
You may want to add my wechat public account or add my technical blog's RSS feed This list is meant ...
- IKAnalyzer
我们的项目中中文切词使用的是mmseg,有一个不满意的地方是jar包中的默认词典一定会被加载进去,当我对有些term有意见时,无法删除. mmseg中Dictionary.java里一段代码保证了/d ...
- linux NFS 配置步骤
转载 http://woxihuanpes.blog.163.com/blog/static/12423219820097139145238/ NFS server可以看作是一个FILE SERVER ...
- Python 学习之路 (一):基础
数据类型和变量 整数 在Python3中,整数可以处理任意大小的整数,不分长整型和整型, 十六进制用0x开头或者H结尾表示:0x2af ,2afH 用函数 int() 来转换字符串中的数字,里面不能包 ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(17)-LinQ动态排序
系列目录 首先修复程序中的一个BUG这个BUG在GridPager类中,把sord修改为sort这个名称填写错误,会导致后台一直无法获取datagrid的排序字段 本来是没有这一讲的,为了使20行的代 ...
- 从273二手车的M站点初探js模块化编程
前言 这几天在看273M站点时被他们的页面交互方式所吸引,他们的首页是采用三次加载+分页的方式.也就说分为大分页和小分页两种交互.大分页就是通过分页按钮来操作,小分页是通过下拉(向下滑动)时异步加载数 ...
- Eclipse 安装 SVN 的在线插件
这是继上次svn 客户端与服务器安装后的如何在Eclipse 环境下在线安装 SVN插件,我的Eclipse版本是4.50 SVN的在线安装 下面为大家提供SVN 的在线安装教程.下面是安装的 详细过 ...