AsyncTask使用方法详情:http://www.cnblogs.com/zzw1994/p/4959949.html

下拉开源框架PullToRefresh使用方法和下载详情:http://www.cnblogs.com/zzw1994/p/4992194.html

具体实现的代码如下:

item.xml:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5      >
 6
 7     <ImageView
 8         android:id="@+id/imageView1"
 9         android:layout_width="50dp"
10         android:layout_height="50dp"
11         android:layout_alignParentLeft="true"
12         android:src="@drawable/ic_launcher" />
13
14     <TextView
15         android:id="@+id/textView"
16         android:layout_width="wrap_content"
17         android:layout_height="wrap_content"
18         android:layout_alignBottom="@+id/imageView1"
19         android:layout_alignParentTop="true"
20         android:layout_toLeftOf="@+id/imageView2"
21         android:layout_toRightOf="@+id/imageView1"
22         android:gravity="center"
23         android:text="TextView"
24        android:textColor="@android:color/holo_red_light"
25         android:textSize="30sp" />
26
27     <ImageView
28         android:id="@+id/imageView2"
29         android:layout_width="50dp"
30         android:layout_height="50dp"
31         android:layout_alignParentRight="true"
32         android:layout_alignParentTop="true"
33         android:src="@drawable/ic_launcher" />
34
35 </RelativeLayout>

item.xml

activity_main.xml:

 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     tools:context="com.zzw.testpulltorefresh.MainActivity" >
 6
 7     <com.handmark.pulltorefresh.library.PullToRefreshListView
 8         android:id="@+id/listView"
 9         android:layout_width="match_parent"
10         android:layout_height="match_parent" />
11
12 </RelativeLayout>

activity_main.xml

MainActivity.java:

  1 package com.zzw.testpulltorefresh;
  2
  3 import java.io.BufferedInputStream;
  4 import java.io.ByteArrayOutputStream;
  5 import java.io.InputStream;
  6 import java.net.HttpURLConnection;
  7 import java.net.URL;
  8 import java.util.ArrayList;
  9 import java.util.Date;
 10 import java.util.HashMap;
 11
 12 import com.handmark.pulltorefresh.library.PullToRefreshBase;
 13 import com.handmark.pulltorefresh.library.PullToRefreshBase.Mode;
 14 import com.handmark.pulltorefresh.library.PullToRefreshBase.OnRefreshListener;
 15 import com.handmark.pulltorefresh.library.PullToRefreshListView;
 16
 17 import android.app.Activity;
 18 import android.content.Context;
 19 import android.graphics.Bitmap;
 20 import android.graphics.BitmapFactory;
 21 import android.graphics.Color;
 22 import android.os.AsyncTask;
 23 import android.os.Bundle;
 24 import android.view.LayoutInflater;
 25 import android.view.View;
 26 import android.view.ViewGroup;
 27 import android.widget.ArrayAdapter;
 28 import android.widget.ImageView;
 29 import android.widget.ListView;
 30 import android.widget.TextView;
 31 import android.widget.Toast;
 32
 33 public class MainActivity extends Activity {
 34     private int COUNT = 0;
 35
 36     private final String IMAGE_KEY1 = "IMAGE_KEY1";
 37     private final String IMAGE_KEY2 = "IMAGE_KEY2";
 38     private final String TEXT_KEY = "TEXT_KEY";
 39
 40     private PullToRefreshListView listView;
 41     private ArrayList<HashMap<String, Object>> data;
 42     private ArrayAdapter adapter;
 43     private String[] urls = { "http://p1.so.qhimg.com/bdr/_240_/t01829c584b50b68311.jpg",
 44             "http://p2.so.qhimg.com/bdr/_240_/t011c2cd4fe8723bcb2.jpg",
 45             "http://p4.so.qhimg.com/bdr/_240_/t01b11db3c0961b24a9.jpg",
 46             "http://p4.so.qhimg.com/bdr/_240_/t019786092c7b1688b9.jpg",
 47             "http://p4.so.qhimg.com/bdr/_240_/t015b226d64a10097ce.jpg",
 48             "http://p1.so.qhimg.com/bdr/_240_/t01f6c4382c907133ab.jpg" };
 49
 50     @Override
 51     protected void onCreate(Bundle savedInstanceState) {
 52         super.onCreate(savedInstanceState);
 53         setContentView(R.layout.activity_main);
 54
 55         data = new ArrayList<HashMap<String, Object>>();
 56
 57         listView = (PullToRefreshListView) findViewById(R.id.listView);
 58
 59         // 设置向下滑动时刷新
 60         listView.setMode(Mode.PULL_FROM_START);
 61         // 支持下拉和上拉 listView.setMode(Mode.BOTH);
 62
 63         // 设置监听
 64         listView.setOnRefreshListener(new OnRefreshListener<ListView>() {
 65
 66             @Override
 67             public void onRefresh(PullToRefreshBase<ListView> refreshView) {
 68                 // 在这完成业务逻辑
 69                 new MyAsyncTask().execute();
 70             }
 71         });
 72
 73         adapter = new MyAdapter(this, R.layout.item);
 74         listView.setAdapter(adapter);
 75
 76         // 设置如果数据为空的时候显示什么
 77         TextView textView = new TextView(this);
 78         textView.setText("请下拉刷新");
 79         listView.setEmptyView(textView);
 80     }
 81
 82     //自定义的Item显示参数设置在Adapter中操作
 83     private class MyAdapter extends ArrayAdapter {
 84
 85         private LayoutInflater inflater;
 86         private int item;
 87
 88         public MyAdapter(Context context, int resource) {
 89             super(context, resource);
 90             inflater = LayoutInflater.from(context);
 91             this.item = resource;
 92         }
 93
 94         @Override
 95         public int getCount() {
 96             return data.size();
 97         }
 98
 99         @Override
100         public HashMap<String, Object> getItem(int position) {
101
102             return data.get(position);
103         }
104
105         @Override
106         public View getView(int position, View convertView, ViewGroup parent) {
107             HashMap<String, Object> map = getItem(position);
108
109             if (convertView == null) {
110                 convertView = inflater.inflate(item, null);
111             }
112
113             ImageView image1 = (ImageView) convertView.findViewById(R.id.imageView1);
114             ImageView image2 = (ImageView) convertView.findViewById(R.id.imageView2);
115             TextView textView = (TextView) convertView.findViewById(R.id.textView);
116
117             image1.setImageBitmap((Bitmap) map.get(IMAGE_KEY1));
118             image2.setImageBitmap((Bitmap) map.get(IMAGE_KEY2));
119             textView.setText(map.get(TEXT_KEY) + "");
120
121             if (position % 2 == 1) {
122                 textView.setTextColor(Color.BLUE);
123             }
124
125             return convertView;
126         }
127
128     }
129
130
131     //联网等一系列延时操作在AsyncTask中操作
132     private class MyAsyncTask extends AsyncTask {
133
134         @Override
135         protected void onPreExecute() {
136             // 开始刷新
137             listView.setRefreshing();
138         }
139
140         @Override
141         protected Object doInBackground(Object... params) {
142             HashMap<String, Object> map = new HashMap<String, Object>();
143             try {
144                 byte[] buf = loadRawDataFromURL(urls[COUNT]);
145                 BitmapFactory factory = new BitmapFactory();
146                 Bitmap bitmap = factory.decodeByteArray(buf, 0, buf.length);
147                 map.put(TEXT_KEY, "数据->" + COUNT);
148                 map.put(IMAGE_KEY1, bitmap);
149                 map.put(IMAGE_KEY2, bitmap);
150             } catch (Exception e) {
151                 e.printStackTrace();
152             }
153             return map;
154         }
155
156         @Override
157         protected void onPostExecute(Object result) {
158
159             data.add(0,(HashMap<String, Object>) result);
160             adapter.notifyDataSetChanged();
161
162             // 设置标签
163             listView.setLastUpdatedLabel("最后更新新的时间:" + new Date());
164
165             // 刷新完成
166             listView.onRefreshComplete();
167             COUNT++;
168             if (COUNT >= urls.length) {
169                 COUNT = 0;
170             }
171             Toast.makeText(getApplicationContext(), "加载成功", 0).show();
172         }
173     }
174
175     // 通过URL读取字节数组
176     public static byte[] loadRawDataFromURL(String u) throws Exception {
177         URL url = new URL(u);
178         HttpURLConnection conn = (HttpURLConnection) url.openConnection();
179
180         InputStream is = conn.getInputStream();
181         BufferedInputStream bis = new BufferedInputStream(is);
182
183         ByteArrayOutputStream baos = new ByteArrayOutputStream();
184         // 缓存2KB
185         final int BUFFER_SIZE = 2 * 1024;
186         final int EOF = -1;
187
188         int c;
189         byte[] buf = new byte[BUFFER_SIZE];
190
191         while (true) {
192             c = bis.read(buf);
193             if (c == EOF)
194                 break;
195
196             baos.write(buf, 0, c);
197         }
198
199         conn.disconnect();
200         is.close();
201
202         byte[] b = baos.toByteArray();
203         baos.flush();
204
205         return b;
206     }
207
208 }

转载于:https://www.cnblogs.com/zzw1994/p/4994245.html

使用自定义的item、Adapter和AsyncTask、第三方开源框架PullToRefresh联合使用实现自定义的下拉列表(从网络加载图片显示在item中的ImageView)...相关推荐

  1. UI一揽子计划 21 (UICollectionView、SDWebImage第三方类库加载图片的使用、集合视图的布局UICollectionViewFlowLayout 、自定义Cell、布局协议

    Pro : SDWebImage第三方类库加载图片的使用: 1.在MRC 环境下 使用ARC 的类库: -fobjc-arc   (Build Phases  --> Compile Sourc ...

  2. Android 自定义ImageView加载图片

    自定义imageview功能: 可以实现设置图片显示的时候,依据本身的比例进行图片的缩放 加载图片效果: 使用ImageLoader来加载 图片: 首先将ImageLoader的jar包关联到项目中 ...

  3. Android批量图片加载经典系列——使用LruCache、AsyncTask缓存并异步加载图片

    一.问题描述 使用LruCache.AsyncTask实现批量图片的加载并达到下列技术要求 1.从缓存中读取图片,若不在缓存中,则开启异步线程(AsyncTask)加载图片,并放入缓存中 2.及时移除 ...

  4. iOS开发常用第三方开源框架

    iOS开发-常用第三方开源框架倾情整理!简书:https://www.jianshu.com/p/29cb22b13d79 iOS第三方库大全:https://blog.csdn.net/kanggu ...

  5. java动态加载jar时,jar中还有第三方jar无法加载的解决方法

    java动态加载jar时,jar中还有第三方jar无法加载的解决方法 当java插件化开发时,即一个java程序在运行的情况下动态加载另一个jar,网上大多数的方法如下 public static v ...

  6. vue图片img加载失败显示自定义默认图片(缺省图)

    vue图片img加载失败显示自定义默认图片(缺省图) 1.图片加载示例  2.加载失败显示默认图片  3.加载失败默认图片代码处理 <div class="book-img" ...

  7. iOS开发 常用第三方开源框架

    iOS开发-常用第三方开源框架介绍(你了解的ios只是冰山一角) 2015-04-05 15:25 2482人阅读 评论(1) 收藏 举报 开源框架 图像: 1.图片浏览控件MWPhotoBrowse ...

  8. IOS-常用第三方开源框架介绍

    iOS开发-常用第三方开源框架介绍(你了解的ios只是冰山一角) 时间:2015-05-06 16:43:34      阅读:533      评论:0      收藏:0      [点我收藏+] ...

  9. Android的SwipeToDismiss第三方开源框架模拟QQ对话列表侧滑删除,置顶,将头像图片圆形化处理。...

      <Android SwipeToDismiss:左右滑动删除ListView条目Item> Android的SwipeToDismiss是github上一个第三方开源框架(github ...

最新文章

  1. 搭建Windows Server 2008故障转移群集
  2. 如何让LINUX程序运行在多CPU?
  3. 【译】光线跟踪:理论与实现(一) 简介
  4. c++中使用 数据库相关知识点 部分后面慢慢加
  5. 我家的漫路超市——怎么开淘宝网店
  6. 360急速浏览器JS的调试
  7. Markdown简单语法总结
  8. 「Jupyter」ubuntu下安装jupyterlab后jupyterlab:未找到命令
  9. Zabbix的安装(源码安装)
  10. 使用Java 8 CompletableFuture和Rx-Java Observable
  11. 2018山东冬令营:UPC 计数问题 (二维树状数组)
  12. java如果文件存在则删除_Java删除文件(如果存在)的更好方法
  13. 计算机专业云计算论文题目,云计算专业论文题目 云计算论文题目如何定
  14. android反编译工具 win8,Apk Easy Tool(android反编译工具)
  15. 飞思卡尔磁力计MAG3110 快速上手指南
  16. 【板栗糖GIS】如何给文件夹批量重命名
  17. UG教程:用UG制作一个属于自己的减压神器——指尖陀螺!
  18. 第二期金牌网管师100%就业培训班招生简章
  19. centos7.6安装博通无线网卡驱动
  20. 上海市档案、居住证积分相关系统

热门文章

  1. Ubuntu 12.04下关闭图形界面
  2. 干 MySQL 两千万数据的大表优化解决过程,三种厉害的解决方案
  3. 云计算,拼的就是运维
  4. 终于有篇看的懂的 B 树文章了!
  5. 饿了么监控平台的架构设计与演进历程
  6. 一起来造一个RxJava,揭秘RxJava的实现原理
  7. spring security CSRF 问题 Invalid CSRF Token 'null' was found on ......
  8. 数据库的七种传播方式
  9. 数据包分片和重组 MTU与MSS
  10. Android --- RecycleView 中默认选择第一个 item,点击第 2 个 item 时改变其字体样式,其余的 item 的字体样式恢复默认