編輯:關於android開發

AsyncTask使用方法詳情:http://www.cnblogs.com/zzw1994/p/4959949.html
下拉開源框架PullToRefresh使用方法和下載詳情:http://www.cnblogs.com/zzw1994/p/4992194.html
具體實現的代碼如下:
item.xml:

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 }
Android基礎入門教程——10.11 傳感器專題(2)——方向傳感器
Android基礎入門教程——10.11 傳感器專題(2)——方向傳感器 Android基礎入門教程——10.11 傳感器專題(2)—
Android開發藝術探索學習筆記(六),android藝術探索
Android開發藝術探索學習筆記(六),android藝術探索第六章 Android的Drawable Drawable的優點:使用簡單,比自定義
Android中AsyncTask的使用詳解
Android中AsyncTask的使用詳解 在Android中我們可以通過Thread+Handler實現多線程通信,一種經典的使用場景是:在新線程中進行耗時操作,
android:ListView緩存機制及BaseAdapter的三重境界(逗比式,普通式,文藝式)
android:ListView緩存機制及BaseAdapter的三重境界(逗比式,普通式,文藝式) 大家都知道listview的格式是一定的 而數據源確是多重多樣的