使用自定义的item、Adapter和AsyncTask、第三方开源框架PullToRefresh联合使用实现自定义的下拉列表(从网络加载图片显示在item中的ImageView)...
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)...相关推荐
- UI一揽子计划 21 (UICollectionView、SDWebImage第三方类库加载图片的使用、集合视图的布局UICollectionViewFlowLayout 、自定义Cell、布局协议
Pro : SDWebImage第三方类库加载图片的使用: 1.在MRC 环境下 使用ARC 的类库: -fobjc-arc (Build Phases --> Compile Sourc ...
- Android 自定义ImageView加载图片
自定义imageview功能: 可以实现设置图片显示的时候,依据本身的比例进行图片的缩放 加载图片效果: 使用ImageLoader来加载 图片: 首先将ImageLoader的jar包关联到项目中 ...
- Android批量图片加载经典系列——使用LruCache、AsyncTask缓存并异步加载图片
一.问题描述 使用LruCache.AsyncTask实现批量图片的加载并达到下列技术要求 1.从缓存中读取图片,若不在缓存中,则开启异步线程(AsyncTask)加载图片,并放入缓存中 2.及时移除 ...
- iOS开发常用第三方开源框架
iOS开发-常用第三方开源框架倾情整理!简书:https://www.jianshu.com/p/29cb22b13d79 iOS第三方库大全:https://blog.csdn.net/kanggu ...
- java动态加载jar时,jar中还有第三方jar无法加载的解决方法
java动态加载jar时,jar中还有第三方jar无法加载的解决方法 当java插件化开发时,即一个java程序在运行的情况下动态加载另一个jar,网上大多数的方法如下 public static v ...
- vue图片img加载失败显示自定义默认图片(缺省图)
vue图片img加载失败显示自定义默认图片(缺省图) 1.图片加载示例 2.加载失败显示默认图片 3.加载失败默认图片代码处理 <div class="book-img" ...
- iOS开发 常用第三方开源框架
iOS开发-常用第三方开源框架介绍(你了解的ios只是冰山一角) 2015-04-05 15:25 2482人阅读 评论(1) 收藏 举报 开源框架 图像: 1.图片浏览控件MWPhotoBrowse ...
- IOS-常用第三方开源框架介绍
iOS开发-常用第三方开源框架介绍(你了解的ios只是冰山一角) 时间:2015-05-06 16:43:34 阅读:533 评论:0 收藏:0 [点我收藏+] ...
- Android的SwipeToDismiss第三方开源框架模拟QQ对话列表侧滑删除,置顶,将头像图片圆形化处理。...
<Android SwipeToDismiss:左右滑动删除ListView条目Item> Android的SwipeToDismiss是github上一个第三方开源框架(github ...
最新文章
- 搭建Windows Server 2008故障转移群集
- 如何让LINUX程序运行在多CPU?
- 【译】光线跟踪:理论与实现(一) 简介
- c++中使用 数据库相关知识点 部分后面慢慢加
- 我家的漫路超市——怎么开淘宝网店
- 360急速浏览器JS的调试
- Markdown简单语法总结
- 「Jupyter」ubuntu下安装jupyterlab后jupyterlab:未找到命令
- Zabbix的安装(源码安装)
- 使用Java 8 CompletableFuture和Rx-Java Observable
- 2018山东冬令营:UPC 计数问题 (二维树状数组)
- java如果文件存在则删除_Java删除文件(如果存在)的更好方法
- 计算机专业云计算论文题目,云计算专业论文题目 云计算论文题目如何定
- android反编译工具 win8,Apk Easy Tool(android反编译工具)
- 飞思卡尔磁力计MAG3110 快速上手指南
- 【板栗糖GIS】如何给文件夹批量重命名
- UG教程:用UG制作一个属于自己的减压神器——指尖陀螺!
- 第二期金牌网管师100%就业培训班招生简章
- centos7.6安装博通无线网卡驱动
- 上海市档案、居住证积分相关系统
热门文章
- Ubuntu 12.04下关闭图形界面
- 干 MySQL 两千万数据的大表优化解决过程,三种厉害的解决方案
- 云计算,拼的就是运维
- 终于有篇看的懂的 B 树文章了!
- 饿了么监控平台的架构设计与演进历程
- 一起来造一个RxJava,揭秘RxJava的实现原理
- spring security CSRF 问题 Invalid CSRF Token 'null' was found on ......
- 数据库的七种传播方式
- 数据包分片和重组 MTU与MSS
- Android --- RecycleView 中默认选择第一个 item,点击第 2 个 item 时改变其字体样式,其余的 item 的字体样式恢复默认