zoukankan      html  css  js  c++  java
  • 使用自定义的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 }
  • 相关阅读:
    关于课程设计、毕业设计的一些总结与思考
    分享一个Panda C-60 维修心得
    未能加载文件或程序集“SuperMap.Data.dll”
    VS2017环境下安装AO10.2的方法
    SQL Server连接错误1326
    VMWare虚拟机中CPU过高的问题
    Apktool编译找不到“keyboardNavigationCluster”
    Aspose.Cells设置单元格格式
    谷歌Chrome浏览器无法安装插件的解决方法
    Global Mapper如何加载在线地图
  • 原文地址:https://www.cnblogs.com/zzw1994/p/4994245.html
Copyright © 2011-2022 走看看