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

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

具体实现的代码如下:

item.xml:

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
> <ImageView
android:id="@+id/imageView1"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_alignParentLeft="true"
android:src="@drawable/ic_launcher" /> <TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/imageView1"
android:layout_alignParentTop="true"
android:layout_toLeftOf="@+id/imageView2"
android:layout_toRightOf="@+id/imageView1"
android:gravity="center"
android:text="TextView"
android:textColor="@android:color/holo_red_light"
android:textSize="30sp" /> <ImageView
android:id="@+id/imageView2"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:src="@drawable/ic_launcher" /> </RelativeLayout>

item.xml

activity_main.xml:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.zzw.testpulltorefresh.MainActivity" > <com.handmark.pulltorefresh.library.PullToRefreshListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent" /> </RelativeLayout>

activity_main.xml

MainActivity.java:

 package com.zzw.testpulltorefresh;

 import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap; import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshBase.Mode;
import com.handmark.pulltorefresh.library.PullToRefreshBase.OnRefreshListener;
import com.handmark.pulltorefresh.library.PullToRefreshListView; import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast; public class MainActivity extends Activity {
private int COUNT = 0; private final String IMAGE_KEY1 = "IMAGE_KEY1";
private final String IMAGE_KEY2 = "IMAGE_KEY2";
private final String TEXT_KEY = "TEXT_KEY"; private PullToRefreshListView listView;
private ArrayList<HashMap<String, Object>> data;
private ArrayAdapter adapter;
private String[] urls = { "http://p1.so.qhimg.com/bdr/_240_/t01829c584b50b68311.jpg",
"http://p2.so.qhimg.com/bdr/_240_/t011c2cd4fe8723bcb2.jpg",
"http://p4.so.qhimg.com/bdr/_240_/t01b11db3c0961b24a9.jpg",
"http://p4.so.qhimg.com/bdr/_240_/t019786092c7b1688b9.jpg",
"http://p4.so.qhimg.com/bdr/_240_/t015b226d64a10097ce.jpg",
"http://p1.so.qhimg.com/bdr/_240_/t01f6c4382c907133ab.jpg" }; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); data = new ArrayList<HashMap<String, Object>>(); listView = (PullToRefreshListView) findViewById(R.id.listView); // 设置向下滑动时刷新
listView.setMode(Mode.PULL_FROM_START);
// 支持下拉和上拉 listView.setMode(Mode.BOTH); // 设置监听
listView.setOnRefreshListener(new OnRefreshListener<ListView>() { @Override
public void onRefresh(PullToRefreshBase<ListView> refreshView) {
// 在这完成业务逻辑
new MyAsyncTask().execute();
}
}); adapter = new MyAdapter(this, R.layout.item);
listView.setAdapter(adapter); // 设置如果数据为空的时候显示什么
TextView textView = new TextView(this);
textView.setText("请下拉刷新");
listView.setEmptyView(textView);
} //自定义的Item显示参数设置在Adapter中操作
private class MyAdapter extends ArrayAdapter { private LayoutInflater inflater;
private int item; public MyAdapter(Context context, int resource) {
super(context, resource);
inflater = LayoutInflater.from(context);
this.item = resource;
} @Override
public int getCount() {
return data.size();
} @Override
public HashMap<String, Object> getItem(int position) { return data.get(position);
} @Override
public View getView(int position, View convertView, ViewGroup parent) {
HashMap<String, Object> map = getItem(position); if (convertView == null) {
convertView = inflater.inflate(item, null);
} ImageView image1 = (ImageView) convertView.findViewById(R.id.imageView1);
ImageView image2 = (ImageView) convertView.findViewById(R.id.imageView2);
TextView textView = (TextView) convertView.findViewById(R.id.textView); image1.setImageBitmap((Bitmap) map.get(IMAGE_KEY1));
image2.setImageBitmap((Bitmap) map.get(IMAGE_KEY2));
textView.setText(map.get(TEXT_KEY) + ""); if (position % 2 == 1) {
textView.setTextColor(Color.BLUE);
} return convertView;
} } //联网等一系列延时操作在AsyncTask中操作
private class MyAsyncTask extends AsyncTask { @Override
protected void onPreExecute() {
// 开始刷新
listView.setRefreshing();
} @Override
protected Object doInBackground(Object... params) {
HashMap<String, Object> map = new HashMap<String, Object>();
try {
byte[] buf = loadRawDataFromURL(urls[COUNT]);
BitmapFactory factory = new BitmapFactory();
Bitmap bitmap = factory.decodeByteArray(buf, 0, buf.length);
map.put(TEXT_KEY, "数据->" + COUNT);
map.put(IMAGE_KEY1, bitmap);
map.put(IMAGE_KEY2, bitmap);
} catch (Exception e) {
e.printStackTrace();
}
return map;
} @Override
protected void onPostExecute(Object result) { data.add(0,(HashMap<String, Object>) result);
adapter.notifyDataSetChanged(); // 设置标签
listView.setLastUpdatedLabel("最后更新新的时间:" + new Date()); // 刷新完成
listView.onRefreshComplete();
COUNT++;
if (COUNT >= urls.length) {
COUNT = 0;
}
Toast.makeText(getApplicationContext(), "加载成功", 0).show();
}
} // 通过URL读取字节数组
public static byte[] loadRawDataFromURL(String u) throws Exception {
URL url = new URL(u);
HttpURLConnection conn = (HttpURLConnection) url.openConnection(); InputStream is = conn.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is); ByteArrayOutputStream baos = new ByteArrayOutputStream();
// 缓存2KB
final int BUFFER_SIZE = 2 * 1024;
final int EOF = -1; int c;
byte[] buf = new byte[BUFFER_SIZE]; while (true) {
c = bis.read(buf);
if (c == EOF)
break; baos.write(buf, 0, c);
} conn.disconnect();
is.close(); byte[] b = baos.toByteArray();
baos.flush(); return b;
} }

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

  1. 开启AsyncTask从网络加载图片

    /*AsyncTask 异步任务即做一些简单的异步处理 :是handle与线程池的封装 * 第一个泛型:参数类型泛型 * 第二个泛型:更新进度泛型 * 第三个泛型:onProgressUpdate的返 ...

  2. 第三方开源框架的下拉刷新列表(QQ比较常用的)。

    PullToRefreshListView是第三方开源框架下拉刷新列表,比较流行的QQ 微信等上面都在用. 下载地址(此开源框架于2013年后不再更新) 点此下载 package com.lixu.k ...

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

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

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

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

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

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

  6. iOS开发-常用第三方开源框架介绍

    iOS开发-常用第三方开源框架介绍 图像: 1.图片浏览控件MWPhotoBrowser        实现了一个照片浏览器类似 iOS 自带的相册应用,可显示来自手机的图片或者是网络图片,可自动从网 ...

  7. ListView或GridView的Adapter使用Glide加载图片异常

    报错信息为:You must not call setTag() on a view Glide is targeting 原因就是View使用setTag后导致Glide之前请求的标记被清除,强制转 ...

  8. swift 异步加载图片(第三方框架ImageLoader)

    import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: ...

  9. iOS常用第三方开源框架和优秀开发者博客等

    博客收藏iOS开发过程好的开源框架.开源项目.Xcode工具插件.Mac软件.文章等,会不断更新维护,希望对你们有帮助.如果有推荐或者建议,请到此处提交推荐或者联系我. 该文档已提交GitHub,点击 ...

随机推荐

  1. Java SE ---类,方法,对象等

    1,面向对象程序设计的三大基本特征:继承(Inheritence).封装(Encapsulation).多态(Polymorphism)     2,如何定义类?            修饰符 cla ...

  2. In-Memory:Hash Index

    SQL Server 2016支持哈希查找,用户可以在内存优化表(Memory-Optimized Table)上创建Hash Index,使用Hash 查找算法,实现数据的极速查找.在使用上,Has ...

  3. 虚拟机的MAC地址分配与修改

    虚拟世界的MAC地址 先看一下真实世界的MAC地址是如何分配,如何保证没有重复的.每块网卡都有一个MAC地址,MAC地址是一个6字节.也即48bit的数据.前3字节称为OUI ,是由IEEE组织注册给 ...

  4. 【求无向图的桥,有重边】ZOJ - 2588 Burning Bridges

    模板题——求割点与桥 题意,要使一个无向图不连通,输出必定要删掉的边的数量及其编号.求桥的裸题,可拿来练手. 套模板的时候注意本题两节点之间可能有多条边,而模板是不判重边的,所以直接套模板的话,会将重 ...

  5. MVC中的 程序集添加-----程序包管理器控制台

    Install-Package Microsoft.AspNet.WebApi.Owin -Version Install-Package Microsoft.Owin.Host.SystemWeb ...

  6. POJ 2456

    #include <iostream> #include <vector> #include <algorithm> using namespace std; un ...

  7. SQL Server 发布订阅 发布类型详解

    MicrosoftSQL Server 提供了三种复制类型. 每种复制类型都适合于不同应用程序的要求. 根据应用程序需要,可以在拓扑中使用一种或多种复制类型: 快照复制 事务复制 合并复制 为了帮助您 ...

  8. SQL批量修改表名

    SELECT NAME FROM SYS. ALL_OBJECTS WHERE TYPE= 'U' ORDER BY MODIFY_DATE DESC --查询所有表名 SELECT NAME FRO ...

  9. CI框架程序--本地调试之后部署新浪SAE

    前几天给朋友写了个简单的网站, 想想还是部署到服务器上让朋友看一下效果! 用CI框架写的,有个SAE新浪云的账号,可以用!就部署到上面去了!途中遇到了一些问题!一一解决了! 在这里分享一下 供遇到这些 ...

  10. 单一职责原则(SRP)

    一个类应仅有一个引起它变化的原因. 内聚性. 每个Responsibility都是变化的一个轴线.当需求变化时,该变化会反映为类的职责的变化 当一个类耦合了多个职责时,一个职责的变化会消弱或抑制其他职 ...