編輯:關於android開發
代碼工程簡要說明:以一個SwipeRefreshLayout包裹ListView,SwipeRefreshLayout接管ListView的下拉事件,若ListView被用戶觸發下拉動作後,SwipeRefreshLayout啟動下拉刷新的UI表現樣式,下拉刷新完畢,在SwipeRefreshLayout提供的接口中回調更新ListView中的數據。
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.testswiperefreshlayout.MainActivity" > 6 7 <android.support.v4.widget.SwipeRefreshLayout 8 android:id="@+id/swipeRefreshLayoyut" 9 android:layout_width="match_parent" 10 android:layout_height="match_parent" > 11 12 <ListView 13 android:id="@+id/listView" 14 android:layout_width="match_parent" 15 android:layout_height="match_parent" /> 16 </android.support.v4.widget.SwipeRefreshLayout> 17 18 </RelativeLayout>
MainActivity.java:
1 package com.zzw.testswiperefreshlayout; 2 3 import java.util.ArrayList; 4 5 import android.app.Activity; 6 import android.os.Bundle; 7 import android.support.v4.widget.SwipeRefreshLayout; 8 import android.support.v4.widget.SwipeRefreshLayout.OnRefreshListener; 9 import android.widget.ArrayAdapter; 10 import android.widget.ListView; 11 12 public class MainActivity extends Activity { 13 14 private SwipeRefreshLayout swipeRefreshLayout; 15 16 private int count = 0; 17 private ArrayList<String> data; 18 private ArrayAdapter<String> adapter; 19 20 @Override 21 protected void onCreate(Bundle savedInstanceState) { 22 super.onCreate(savedInstanceState); 23 setContentView(R.layout.activity_main); 24 25 data = new ArrayList<String>(); 26 27 swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipeRefreshLayoyut); 28 ListView listView = (ListView) findViewById(R.id.listView); 29 30 // 設置刷新動畫的顏色,可以設置1或者更多. 31 // 我們暫時使用三個Android系統自帶的顏色。 32 swipeRefreshLayout.setColorSchemeResources(android.R.color.holo_red_light, android.R.color.holo_green_light, 33 android.R.color.holo_orange_light); 34 35 swipeRefreshLayout.setOnRefreshListener(new OnRefreshListener() { 36 37 @Override 38 public void onRefresh() { 39 longTimeOperation(); 40 } 41 }); 42 // 使用Android系統自帶的一個簡單TextView布局文件android.R.layout.simple_list_item_1顯示我們的數據內容。 43 adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, data); 44 45 listView.setAdapter(adapter); 46 } 47 48 // 每一次下拉刷新將觸發更新操作動作。 49 // 這裡將是比較耗時的操作:如網絡請求的數據,加載一個大圖片。 50 // 簡單期間,我們假設就是簡單的將count數據加1,然後更新顯示。 51 // 52 // 備注:swipeRefreshLayout.setRefreshing(true) 到 53 // swipeRefreshLayout.setRefreshing(false)之間的這段代碼 , 54 // 在實際的應用開發中一般就是線程化的、耗時的或者後台的操作代碼。 55 private void longTimeOperation() { 56 // true,刷新開始,所以啟動刷新的UI樣式. 57 swipeRefreshLayout.setRefreshing(true); 58 59 // 開始啟動刷新... 60 // 在這兒放耗時操作的 AsyncTask線程、後台Service等代碼。 61 62 // add(0,xxx)每次將更新的數據xxx添加到頭部。 63 data.add(0, "" + count++); 64 adapter.notifyDataSetChanged(); 65 66 // 刷新完畢 67 // false,刷新完成,因此停止UI的刷新表現樣式。 68 swipeRefreshLayout.setRefreshing(false); 69 } 70 71 }
在上面如果遇到一個耗時操作就會造成主線程堵塞,所以將上述的小Demo進行了簡單的優化,把耗時操作放在了一個AsyncTask中操作:
actuvity_main.xml不變,變化的是MainActivity.java:
代碼為:
1 package com.zzw.testswiperefreshlayout; 2 3 import java.util.ArrayList; 4 5 import android.app.Activity; 6 import android.os.AsyncTask; 7 import android.os.Bundle; 8 import android.os.SystemClock; 9 import android.support.v4.widget.SwipeRefreshLayout; 10 import android.support.v4.widget.SwipeRefreshLayout.OnRefreshListener; 11 import android.widget.ArrayAdapter; 12 import android.widget.ListView; 13 14 public class MainActivity extends Activity { 15 16 private SwipeRefreshLayout swipeRefreshLayout; 17 18 private int count = 0; 19 private ArrayList<String> data; 20 private ArrayAdapter<String> adapter; 21 22 @Override 23 protected void onCreate(Bundle savedInstanceState) { 24 super.onCreate(savedInstanceState); 25 setContentView(R.layout.activity_main); 26 27 data = new ArrayList<String>(); 28 29 swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipeRefreshLayoyut); 30 ListView listView = (ListView) findViewById(R.id.listView); 31 32 // 設置刷新動畫的顏色,可以設置1或者更多. 33 // 我們暫時使用三個Android系統自帶的顏色。 34 swipeRefreshLayout.setColorSchemeResources(android.R.color.holo_red_light, android.R.color.holo_green_light, 35 android.R.color.holo_orange_light); 36 37 swipeRefreshLayout.setOnRefreshListener(new OnRefreshListener() { 38 39 @Override 40 public void onRefresh() { 41 new MyAsyncTask().execute(); 42 } 43 }); 44 // 使用Android系統自帶的一個簡單TextView布局文件android.R.layout.simple_list_item_1顯示我們的數據內容。 45 adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, data); 46 47 listView.setAdapter(adapter); 48 } 49 50 private class MyAsyncTask extends AsyncTask { 51 52 // 初始化 53 @Override 54 protected void onPreExecute() { 55 // true,刷新開始,所以啟動刷新的UI樣式. 56 swipeRefreshLayout.setRefreshing(true); 57 } 58 59 protected Object doInBackground(Object... params) { 60 // 假設耗時5秒 61 SystemClock.sleep(5000); 62 return count++; 63 } 64 65 @Override 66 protected void onPostExecute(Object result) { 67 // add(0,xxx)每次將更新的數據xxx添加到頭部。 68 data.add(0, result + ""); 69 adapter.notifyDataSetChanged(); 70 71 // 刷新完畢 72 // false,刷新完成,因此停止UI的刷新表現樣式。 73 swipeRefreshLayout.setRefreshing(false); 74 } 75 76 } 77 78 }
最後的結果如下圖:
Android帶頭像的用戶注冊頁面,android用戶注冊詳細的圖文可以到我的百度經驗去查看:http://jingyan.baidu.com/article/cd4c2
Android SharedPreference的使用,sharedpreference在《Android 在內部存儲讀寫文件》一文中,談到了登錄用戶名和密碼的方法,通過
【React Native開發】React Native控件之ProgressBarAndroid進度條講解(12) (一)前言 今天我們一起來看一下進度加載條Pro
Android開發案例,android案例所有電商APP的商品詳情頁面幾乎都是和淘寶的一模一樣(見下圖): 采用上下分頁的模式 商品基本參數 & 選購參數在上頁