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 ...
随机推荐
- 关于HTML5中video标签的奇怪现象
很多人刚开始学习html5 的时候在使用video标签时会出现这样的情况: 发现video标签在网页中播放时只有声音但是没有图像,如: <!DOCTYPE html> <html&g ...
- Kafka组件监控
Kafka web console http://blog.csdn.net/hengyunabc/article/details/40431627 KafkaOffsetMonitor http:/ ...
- selenium借助AutoIt识别上传(下载)详解
AutoIt目前最新是v3版本,这是一个使用类似BASIC脚本语言的免费软件,它设计用于Windows GUI(图形用户界面)中进行自动化操作.它利用模拟键盘按键,鼠标移动和窗口/控件的组合来实现自动 ...
- django for monkey(chapter one)
一.获取设备驱动 class monkey(object): def get_devices(self): self.a = os.popen('adb devices') self.devices ...
- App软件开发的完整在线流程(一看就懂)
App软件开发其实并不复杂,完整的在线App开发不过9个步骤,一看就明白到底是怎么回事. 第一步:需求评估 在App项目正式启动前,客户应该对自己的需求进行评估,确认项目的开发周期和成本.登录APIC ...
- yum下载rpm
yum下载rpm yum update --downloadonly --downloaddir=/root/rpm_package/ python-pip
- docker images之间相互通信 link
同一个host上的两个container 首先启动一个nginx. container起名叫netease_nginx docker run --detach --name netease_nginx ...
- scrum3.0
3.0----------------------------------------------------- SCRUM 流程的步骤2: Spring 计划 1. 确保product backlo ...
- C++之路进阶——codevs2492(上帝造题的七分钟 2)
2492 上帝造题的七分钟 2 时间限制: 1 s 空间限制: 64000 KB 题目等级 : 大师 Master 题目描述 Description XLk觉得<上帝造题的七分钟&g ...
- Linux系统巡检常用命令
# uname -a # 查看内核/操作系统/CPU信息 # head -n 1 /etc/issue # 查看操作系统版本 # cat /proc/cpuinfo # 查看CPU信息 # hostn ...