pulltorefresh插件可以轻松实现上拉下拉刷新,github.com上直接搜索进行下载。

布局文件:

  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:ptr="http://schemas.android.com/apk/res-auto"
  3. xmlns:tools="http://schemas.android.com/tools"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent"
  6. android:paddingBottom="@dimen/activity_vertical_margin"
  7. android:paddingLeft="@dimen/activity_horizontal_margin"
  8. android:paddingRight="@dimen/activity_horizontal_margin"
  9. android:paddingTop="@dimen/activity_vertical_margin"
  10. tools:context=".MainActivity" >
  11.  
  12. <com.handmark.pulltorefresh.library.PullToRefreshListView
  13. android:id="@+id/pull_to_refresh_listview"
  14. android:layout_height="fill_parent"
  15. android:layout_width="fill_parent"
  16. ptr:ptrDrawable="@drawable/default_ptr_flip"
  17. ptr:ptrAnimationStyle="flip"
  18. ptr:ptrHeaderBackground="@android:color/transparent"
  19. ptr:ptrHeaderTextColor="#919191"
  20. />
  21. </RelativeLayout>

核心代码如下,这里用到了Android当中不少的知识点,其中主要的是异步任务处理、自定义适配器。

  1. package com.example.pulltorefresh;
  2.  
  3. import java.util.ArrayList;
  4.  
  5. import com.handmark.pulltorefresh.library.ILoadingLayout;
  6. import com.handmark.pulltorefresh.library.PullToRefreshBase;
  7. import com.handmark.pulltorefresh.library.PullToRefreshListView;
  8.  
  9. import android.os.AsyncTask;
  10. import android.os.Bundle;
  11. import android.app.Activity;
  12. import android.content.Context;
  13. import android.view.LayoutInflater;
  14. import android.view.Menu;
  15. import android.view.View;
  16. import android.view.ViewGroup;
  17. import android.widget.BaseAdapter;
  18. import android.widget.TextView;
  19.  
  20. public class MainActivity extends Activity {
  21.  
  22. private PullToRefreshListView pullToRefreshView;
  23. private ArrayList<Music> musics=new ArrayList<Music>();
  24. private DataAdapter dataAdapter;
  25. protected void onCreate(Bundle savedInstanceState) {
  26. super.onCreate(savedInstanceState);
  27. setContentView(R.layout.activity_main);
  28.  
  29. pullToRefreshView = (PullToRefreshListView) findViewById(R.id.pull_to_refresh_listview);
  30. pullToRefreshView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() {
  31.  
  32. @Override
  33. public void onPullDownToRefresh(PullToRefreshBase refreshView) {
  34. // TODO 自动生成的方法存根
  35. new DataAsyncTask(MainActivity.this).execute();
  36. }
  37.  
  38. @Override
  39. public void onPullUpToRefresh(PullToRefreshBase refreshView) {
  40. // TODO 自动生成的方法存根
  41. new DataAsyncTask(MainActivity.this).execute();
  42. }
  43. });
  44. pullToRefreshView.setMode(PullToRefreshBase.Mode.BOTH);
  45. ILoadingLayout startLabels = pullToRefreshView
  46. .getLoadingLayoutProxy(true, false);
  47. startLabels.setPullLabel("下拉刷新...");// 刚下拉时,显示的提示
  48. startLabels.setRefreshingLabel("正在载入...");// 刷新时
  49. startLabels.setReleaseLabel("放开刷新...");// 下来达到一定距离时,显示的提示
  50.  
  51. ILoadingLayout endLabels = pullToRefreshView.getLoadingLayoutProxy(
  52. false, true);
  53. endLabels.setPullLabel("上拉刷新...");// 刚下拉时,显示的提示
  54. endLabels.setRefreshingLabel("正在载入...");// 刷新时
  55. endLabels.setReleaseLabel("放开刷新...");// 下来达到一定距离时,显示的提示
  56. loadData();
  57. dataAdapter=new DataAdapter(this, musics);
  58. pullToRefreshView.setAdapter(dataAdapter);
  59. }
  60.  
  61. @Override
  62. public boolean onCreateOptionsMenu(Menu menu) {
  63. // Inflate the menu; this adds items to the action bar if it is present.
  64. getMenuInflater().inflate(R.menu.main, menu);
  65. return true;
  66. }
  67.  
  68. private int count;
  69. private void loadData(){
  70. for(int i=;i<;i++){
  71. musics.add(new Music("歌曲-"+count,"歌手-"+count));
  72. count++;
  73. }
  74. }
  75. static class DataAsyncTask extends AsyncTask<Void, Void, String>{
  76. private MainActivity mainActivity;
  77. public DataAsyncTask(MainActivity mainActivity){
  78. this.mainActivity=mainActivity;
  79. }
  80.  
  81. @Override
  82. protected String doInBackground(Void... arg0) {
  83. try {
  84. Thread.sleep();
  85. } catch (InterruptedException e) {
  86. // TODO 自动生成的 catch 块
  87. e.printStackTrace();
  88. }
  89. mainActivity.loadData();
  90. return "success";
  91. }
  92.  
  93. @Override
  94. protected void onPostExecute(String result) {
  95. // TODO 自动生成的方法存根
  96. super.onPostExecute(result);
  97. if("success".equals(result)){
  98. mainActivity.dataAdapter.notifyDataSetChanged();
  99. mainActivity.pullToRefreshView.onRefreshComplete();
  100.  
  101. }
  102. }
  103. }
  104.  
  105. static class DataAdapter extends BaseAdapter{
  106.  
  107. private Context ctx;
  108. private ArrayList<Music> musics;
  109. public DataAdapter(Context ctx,ArrayList<Music> musics){
  110. this.ctx=ctx;
  111. this.musics=musics;
  112. }
  113. @Override
  114. public int getCount() {
  115. // TODO 自动生成的方法存根
  116. return musics.size();
  117. }
  118.  
  119. @Override
  120. public Object getItem(int arg0) {
  121. // TODO 自动生成的方法存根
  122. return musics.get(arg0);
  123. }
  124.  
  125. @Override
  126. public long getItemId(int arg0) {
  127. // TODO 自动生成的方法存根
  128. return arg0;
  129. }
  130.  
  131. //ViewHolder就是一个持有者的类,他里面一般没有方法,只有属性,作用就是一个临时的储存器,
  132. //把你getView方法中每次返回的View存起来,可以下次再用。这样做的好处就是不必每次都到布局文件中去拿到你的View,提高了效率
  133. @Override
  134. public View getView(int arg0, View arg1, ViewGroup arg2) {
  135. ViewHolder vh;
  136. if(arg1==null){
  137. arg1=LayoutInflater.from(ctx).inflate(R.layout.listitem,null);
  138. vh=new ViewHolder();
  139. vh.tv_title=(TextView) arg1.findViewById(R.id.gequ);
  140. vh.tv_singer=(TextView) arg1.findViewById(R.id.geshou);
  141. arg1.setTag(vh);
  142. }
  143. vh=(ViewHolder) arg1.getTag();
  144. Music m=musics.get(arg0);
  145. vh.tv_title.setText(m.getTitle());
  146. vh.tv_singer.setText(m.getSinger());
  147. return arg1;
  148. }
  149.  
  150. static class ViewHolder{
  151. TextView tv_title;
  152. TextView tv_singer;
  153. }
  154. }
  155. }

附带核心代码中用到的Music类,自定义适配器用到的自定义布局很简单,就两个TextView,这里略。

  1. package com.example.pulltorefresh;
  2.  
  3. public class Music {
  4. private String title;
  5. private String singer;
  6. public String getTitle() {
  7. return title;
  8. }
  9. public void setTitle(String title) {
  10. this.title = title;
  11. }
  12. public String getSinger() {
  13. return singer;
  14. }
  15. public void setSinger(String singer) {
  16. this.singer = singer;
  17. }
  18. public Music(String title, String singer) {
  19. this.title = title;
  20. this.singer = singer;
  21. }
  22. public Music() {
  23. }
  24.  
  25. }

Android pulltorefresh使用的更多相关文章

  1. 【转载】 Android PullToRefresh (ListView GridView 下拉刷新) 使用详解

    Android下拉刷新pullToRefreshListViewGridView 转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/3 ...

  2. Android PullToRefresh (GridView 下拉刷新上拉加载)

    做这个需要自己去git hub上下载个pull-to-refresh 里面有个library为依赖包自己导到自己的项目中 (下载地址:https://github.com/chrisbanes/And ...

  3. Android PullToRefresh (ListView GridView 下拉刷新) 使用详解

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38238749,本文出自:[张鸿洋的博客] 群里一哥们今天聊天偶然提到这个git ...

  4. Android PullToRefresh (ListView GridView 下拉刷新) 使用详解 (转载)

    最近项目用到下拉刷新,上来加载更多,这里对PullToRefresh这控件进行了解和使用. 以下内容转载自:http://blog.csdn.net/lmj623565791/article/deta ...

  5. Android PullToRefresh下拉刷新控件的简单使用

    PullToRefresh这个开源库早就听说了,不过一直没用过.作为一个经典的的开源库,我觉得还是有必要认识一下. 打开github上的网址:https://github.com/chrisbanes ...

  6. Android -- PullToRefresh应用

    PullToRefresh 支持ListView.ExpandableListView.GridView.WebView 下载地址:https://github.com/chrisbanes/Andr ...

  7. 【转】Android PullToRefresh (ListView GridView 下拉刷新) 使用详解

    最近项目用到下拉刷新,上来加载更多,这里对PullToRefresh这控件进行了解和使用. 以下内容转载自:http://blog.csdn.net/lmj623565791/article/deta ...

  8. Android PullToRefresh 下拉刷新,上拉很多其它,支持ScrollView,ListView,可方便拓展GridView,WebView等

    在写着东西之前.从网上找到非常多这方面的源代码,可是基本没有找到惬意的.包含在GitHub上的比較有名的Android-PullToRefresh-master.思来想去还是自己写吧.当然当中借鉴了一 ...

  9. Android pulltorefresh引用遇到的一个问题

    今天在使用pulltorefresh插件的时候遇到了一个让人头疼的问题,在Eclipse中导入要用到的library项目,然后新建一个项目引入Library,显示的是引入成功,如图 而且project ...

随机推荐

  1. 关于HTML5中video标签的奇怪现象

    很多人刚开始学习html5 的时候在使用video标签时会出现这样的情况: 发现video标签在网页中播放时只有声音但是没有图像,如: <!DOCTYPE html> <html&g ...

  2. Kafka组件监控

    Kafka web console http://blog.csdn.net/hengyunabc/article/details/40431627 KafkaOffsetMonitor http:/ ...

  3. selenium借助AutoIt识别上传(下载)详解

    AutoIt目前最新是v3版本,这是一个使用类似BASIC脚本语言的免费软件,它设计用于Windows GUI(图形用户界面)中进行自动化操作.它利用模拟键盘按键,鼠标移动和窗口/控件的组合来实现自动 ...

  4. django for monkey(chapter one)

    一.获取设备驱动 class monkey(object): def get_devices(self): self.a = os.popen('adb devices') self.devices ...

  5. App软件开发的完整在线流程(一看就懂)

    App软件开发其实并不复杂,完整的在线App开发不过9个步骤,一看就明白到底是怎么回事. 第一步:需求评估 在App项目正式启动前,客户应该对自己的需求进行评估,确认项目的开发周期和成本.登录APIC ...

  6. yum下载rpm

    yum下载rpm yum update --downloadonly --downloaddir=/root/rpm_package/   python-pip

  7. docker images之间相互通信 link

    同一个host上的两个container 首先启动一个nginx. container起名叫netease_nginx docker run --detach --name netease_nginx ...

  8. scrum3.0

    3.0----------------------------------------------------- SCRUM 流程的步骤2: Spring 计划 1. 确保product backlo ...

  9. C++之路进阶——codevs2492(上帝造题的七分钟 2)

    2492 上帝造题的七分钟 2  时间限制: 1 s  空间限制: 64000 KB  题目等级 : 大师 Master    题目描述 Description XLk觉得<上帝造题的七分钟&g ...

  10. Linux系统巡检常用命令

    # uname -a # 查看内核/操作系统/CPU信息 # head -n 1 /etc/issue # 查看操作系统版本 # cat /proc/cpuinfo # 查看CPU信息 # hostn ...