Android pulltorefresh使用
pulltorefresh插件可以轻松实现上拉下拉刷新,github.com上直接搜索进行下载。
布局文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:ptr="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" > <com.handmark.pulltorefresh.library.PullToRefreshListView
android:id="@+id/pull_to_refresh_listview"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
ptr:ptrDrawable="@drawable/default_ptr_flip"
ptr:ptrAnimationStyle="flip"
ptr:ptrHeaderBackground="@android:color/transparent"
ptr:ptrHeaderTextColor="#919191"
/>
</RelativeLayout>
核心代码如下,这里用到了Android当中不少的知识点,其中主要的是异步任务处理、自定义适配器。
package com.example.pulltorefresh; import java.util.ArrayList; import com.handmark.pulltorefresh.library.ILoadingLayout;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshListView; import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView; public class MainActivity extends Activity { private PullToRefreshListView pullToRefreshView;
private ArrayList<Music> musics=new ArrayList<Music>();
private DataAdapter dataAdapter;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); pullToRefreshView = (PullToRefreshListView) findViewById(R.id.pull_to_refresh_listview);
pullToRefreshView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() { @Override
public void onPullDownToRefresh(PullToRefreshBase refreshView) {
// TODO 自动生成的方法存根
new DataAsyncTask(MainActivity.this).execute();
} @Override
public void onPullUpToRefresh(PullToRefreshBase refreshView) {
// TODO 自动生成的方法存根
new DataAsyncTask(MainActivity.this).execute();
}
});
pullToRefreshView.setMode(PullToRefreshBase.Mode.BOTH);
ILoadingLayout startLabels = pullToRefreshView
.getLoadingLayoutProxy(true, false);
startLabels.setPullLabel("下拉刷新...");// 刚下拉时,显示的提示
startLabels.setRefreshingLabel("正在载入...");// 刷新时
startLabels.setReleaseLabel("放开刷新...");// 下来达到一定距离时,显示的提示 ILoadingLayout endLabels = pullToRefreshView.getLoadingLayoutProxy(
false, true);
endLabels.setPullLabel("上拉刷新...");// 刚下拉时,显示的提示
endLabels.setRefreshingLabel("正在载入...");// 刷新时
endLabels.setReleaseLabel("放开刷新...");// 下来达到一定距离时,显示的提示
loadData();
dataAdapter=new DataAdapter(this, musics);
pullToRefreshView.setAdapter(dataAdapter);
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
} private int count;
private void loadData(){
for(int i=;i<;i++){
musics.add(new Music("歌曲-"+count,"歌手-"+count));
count++;
}
}
static class DataAsyncTask extends AsyncTask<Void, Void, String>{
private MainActivity mainActivity;
public DataAsyncTask(MainActivity mainActivity){
this.mainActivity=mainActivity;
} @Override
protected String doInBackground(Void... arg0) {
try {
Thread.sleep();
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
mainActivity.loadData();
return "success";
} @Override
protected void onPostExecute(String result) {
// TODO 自动生成的方法存根
super.onPostExecute(result);
if("success".equals(result)){
mainActivity.dataAdapter.notifyDataSetChanged();
mainActivity.pullToRefreshView.onRefreshComplete(); }
}
} static class DataAdapter extends BaseAdapter{ private Context ctx;
private ArrayList<Music> musics;
public DataAdapter(Context ctx,ArrayList<Music> musics){
this.ctx=ctx;
this.musics=musics;
}
@Override
public int getCount() {
// TODO 自动生成的方法存根
return musics.size();
} @Override
public Object getItem(int arg0) {
// TODO 自动生成的方法存根
return musics.get(arg0);
} @Override
public long getItemId(int arg0) {
// TODO 自动生成的方法存根
return arg0;
} //ViewHolder就是一个持有者的类,他里面一般没有方法,只有属性,作用就是一个临时的储存器,
//把你getView方法中每次返回的View存起来,可以下次再用。这样做的好处就是不必每次都到布局文件中去拿到你的View,提高了效率
@Override
public View getView(int arg0, View arg1, ViewGroup arg2) {
ViewHolder vh;
if(arg1==null){
arg1=LayoutInflater.from(ctx).inflate(R.layout.listitem,null);
vh=new ViewHolder();
vh.tv_title=(TextView) arg1.findViewById(R.id.gequ);
vh.tv_singer=(TextView) arg1.findViewById(R.id.geshou);
arg1.setTag(vh);
}
vh=(ViewHolder) arg1.getTag();
Music m=musics.get(arg0);
vh.tv_title.setText(m.getTitle());
vh.tv_singer.setText(m.getSinger());
return arg1;
} static class ViewHolder{
TextView tv_title;
TextView tv_singer;
}
}
}
附带核心代码中用到的Music类,自定义适配器用到的自定义布局很简单,就两个TextView,这里略。
package com.example.pulltorefresh; public class Music {
private String title;
private String singer;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getSinger() {
return singer;
}
public void setSinger(String singer) {
this.singer = singer;
}
public Music(String title, String singer) {
this.title = title;
this.singer = singer;
}
public Music() {
} }
Android pulltorefresh使用的更多相关文章
- 【转载】 Android PullToRefresh (ListView GridView 下拉刷新) 使用详解
Android下拉刷新pullToRefreshListViewGridView 转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/3 ...
- Android PullToRefresh (GridView 下拉刷新上拉加载)
做这个需要自己去git hub上下载个pull-to-refresh 里面有个library为依赖包自己导到自己的项目中 (下载地址:https://github.com/chrisbanes/And ...
- Android PullToRefresh (ListView GridView 下拉刷新) 使用详解
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38238749,本文出自:[张鸿洋的博客] 群里一哥们今天聊天偶然提到这个git ...
- Android PullToRefresh (ListView GridView 下拉刷新) 使用详解 (转载)
最近项目用到下拉刷新,上来加载更多,这里对PullToRefresh这控件进行了解和使用. 以下内容转载自:http://blog.csdn.net/lmj623565791/article/deta ...
- Android PullToRefresh下拉刷新控件的简单使用
PullToRefresh这个开源库早就听说了,不过一直没用过.作为一个经典的的开源库,我觉得还是有必要认识一下. 打开github上的网址:https://github.com/chrisbanes ...
- Android -- PullToRefresh应用
PullToRefresh 支持ListView.ExpandableListView.GridView.WebView 下载地址:https://github.com/chrisbanes/Andr ...
- 【转】Android PullToRefresh (ListView GridView 下拉刷新) 使用详解
最近项目用到下拉刷新,上来加载更多,这里对PullToRefresh这控件进行了解和使用. 以下内容转载自:http://blog.csdn.net/lmj623565791/article/deta ...
- Android PullToRefresh 下拉刷新,上拉很多其它,支持ScrollView,ListView,可方便拓展GridView,WebView等
在写着东西之前.从网上找到非常多这方面的源代码,可是基本没有找到惬意的.包含在GitHub上的比較有名的Android-PullToRefresh-master.思来想去还是自己写吧.当然当中借鉴了一 ...
- Android pulltorefresh引用遇到的一个问题
今天在使用pulltorefresh插件的时候遇到了一个让人头疼的问题,在Eclipse中导入要用到的library项目,然后新建一个项目引入Library,显示的是引入成功,如图 而且project ...
随机推荐
- OpenERP/Odoo命令行参数
http://blog.sina.com.cn/s/blog_7cb52fa80102v8h1.html
- ORM系列之一:Dos.ORM
阅读目录 引言 1.为什么使用Dos.ORM 2.配置 3.开始使用 3.1. 物理表 3.2. 实体类 3.3. 使用方法 引言 Dos.ORM(原名Hxj.Data)于2009年发布,2015年正 ...
- Java学习-042-获取目录文件列表(当前,级联)
以下三个场景,在我们日常的测试开发中经常遇到: 软件自动化测试,在进行参数测试时,我们通常将所有相似功能的参数文件统一放在一个目录中,在自动化程序启动的时候,获取资源参数文件夹中所有参数文件,然后解析 ...
- iOS后台定位,实时向服务器发送最新位置
第一步,开启后台模式,选中定位,选择project --> capabilities-->Backgorund Modes --> Location updates 如图: Past ...
- windows服务的创建、安装、调试全过程及引发的后续学习
前几天做项目的时候需要用到window服务,研究一段时间,算是掌握了最基本的使用方法吧,现总结如下: 引言:在项目过程中碰到一个问题:需要不断的扫描一个大型数据库表,并获取dataset,以便做后续的 ...
- WWDC 2013 Session笔记 - iOS7中的多任务
这是我的WWDC2013系列笔记中的一篇,完整的笔记列表请参看这篇总览.本文仅作为个人记录使用,也欢迎在许可协议范围内转载或使用,但是还烦请保留原文链接,谢谢您的理解合作.如果您觉得本站对您能有帮助, ...
- AngularJS Best Practices: pretty urls
By default, AngularJS will route URLs with a hashtag. For example: http://example.com/ http://exampl ...
- EF CodeFirst 如何通过配置自动创建数据库<当模型改变时>
最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精 本篇为进阶篇,也是弥补自己之前没搞明白的地方,惭愧 ...
- 安装eclipse与pydev
按照此文档 最简单的eclipse安装方法 sudo apt-get install eclipse 弊端:因为ubuntu默认安装的不是最新版本的eclipse,所以你也不能安装最新的pydev. ...
- 从零开始学Linux[三]:shell脚本学习
测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试