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 }
  • 相关阅读:
    【java】对象赋值给另一个对象
    spring boot系列(五)spring boot 配置spring data jpa (查询方法)
    Spring Data JPA 查询
    Spring Data JPA 介绍
    OpenID简介
    OAUTH协议介绍
    URL encoding(URL编码)
    RESTful 介绍
    spring boot系列(四)spring boot 配置spring data jpa (保存修改删除方法)
    spring boot 启动报 java.lang.NoClassDefFoundError: ch/qos/logback/core/spi/LifeCycle 错误
  • 原文地址:https://www.cnblogs.com/zzw1994/p/4994245.html
Copyright © 2011-2022 走看看