標籤:font cto image ide asd 關係 ruby fonts 布局
參考部落格:http://blog.csdn.net/lmj623565791/article/details/24521483
自己敲了下代碼,這個方式重新整理確實給人耳目一新的感覺。資源:含有兩個SwipeRefreshLayout實戰的Demo,http://download.csdn.net/detail/itjavawfc/8847339
用起來很好用:看看文檔幾個重要的方法,簡單拿來用沒有不論什麼問題。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSXRKYXZhd2Zj/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >
案例1:
主要相關代碼
public class MainActivity extends Activity implements SwipeRefreshLayout.OnRefreshListener{private static final int REFRESH_COMPLETE = 0X110;private SwipeRefreshLayout mSwipeLayout;private ListView mListView;private ArrayAdapter<String> mAdapter;private List<String> mDatas = new ArrayList<String>(Arrays.asList("Java", "Javascript", "C++", "Ruby", "Json","HTML"));private Handler mHandler = new Handler(){public void handleMessage(android.os.Message msg){switch (msg.what){case REFRESH_COMPLETE:mDatas.addAll(Arrays.asList("Lucene", "Canvas", "Bitmap"));mAdapter.notifyDataSetChanged();mSwipeLayout.setRefreshing(false);break;}};};protected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mListView = (ListView) findViewById(R.id.id_listview);mSwipeLayout = (SwipeRefreshLayout) findViewById(R.id.id_swipe_ly);mSwipeLayout.setOnRefreshListener(this);mSwipeLayout.setColorScheme(android.R.color.holo_green_dark, android.R.color.holo_green_light,android.R.color.holo_orange_light, android.R.color.holo_red_light);mAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mDatas);mListView.setAdapter(mAdapter);}public void onRefresh(){mHandler.sendEmptyMessageDelayed(REFRESH_COMPLETE, 2000);}}
當中的布局例如以下:
基本上全部的布局都是被一個重新整理的布局
android.support.v4.widget.SwipeRefreshLayout<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">所包圍</span></span>
<span style="font-size:18px;"><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <android.support.v4.widget.SwipeRefreshLayout android:id="@+id/id_swipe_ly" android:layout_width="match_parent" android:layout_height="match_parent" > <ListView android:id="@+id/id_listview" android:layout_width="match_parent" android:layout_height="match_parent" > </ListView> </android.support.v4.widget.SwipeRefreshLayout></RelativeLayout>
案例二:
採用了adapter適配器來適配相關資料,實現更好的展示效果:】
adapter
public class ListViewAdapter extends BaseAdapter {/** 環境資訊 **/private Context context;/** 使用者中心資訊集合 **/private ArrayList<SoftwareClassificationInfo> list;/** 構造**/public ListViewAdapter(Context context, ArrayList<SoftwareClassificationInfo> list) {this.context = context;this.list = list;}public int getCount() {// TODO Auto-generated method stubreturn list.size();}public Object getItem(int arg0) {// TODO Auto-generated method stubreturn null;}public long getItemId(int arg0) {return 0;}public View getView(int position, View convertView, ViewGroup arg2) {_View view = null;if (convertView == null) {view = new _View();convertView = LayoutInflater.from(context).inflate(R.layout.user_center_list_item, null);view.list_text = (TextView) convertView.findViewById(R.id.user_center_item_txt);view.list_img = (ImageView) convertView.findViewById(R.id.user_center_item_img);convertView.setTag(view);} else {view = (_View) convertView.getTag();}view.list_text.setText(list.get(position).getCatname());//view.list_img.setBackgroundDrawable(context.getResources().getDrawable(//R.drawable.tool_box_fragment_settings_icon));view.list_img.setBackgroundResource(R.drawable.tool_box_fragment_settings_icon);return convertView;}class _View {TextView list_text;ImageView list_img;}}實體類:
public class SoftwareClassificationInfo {/** 分類編號 **/private int cid;/** 分類名字 **/private String catname;public int getCid() {return cid;}public void setCid(int cid) {this.cid = cid;}public String getCatname() {return catname;}public void setCatname(String catname) {this.catname = catname;}public SoftwareClassificationInfo() {// TODO Auto-generated constructor stub}public SoftwareClassificationInfo(int cid, String catname) {// TODO Auto-generated constructor stubthis.cid = cid;this.catname = catname;}}
主Activity
public class SwipRefreshLayoutActivity extends Activity implementsSwipeRefreshLayout.OnRefreshListener {private SwipeRefreshLayout swipeLayout;private ListView listView;private ListViewAdapter adapter;private ArrayList<SoftwareClassificationInfo> list;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.swipe_refresh_layout);//1.從布局中載入一個帶重新整理的ListView的外層SwipeRefreshLayoutswipeLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_container);//2.給這個帶重新整理的ListView設定重新整理監聽器swipeLayout.setOnRefreshListener(this);//3.載入顏色是迴圈播放的,僅僅要沒有完畢重新整理就會一直迴圈,color1>color2>color3>color4swipeLayout.setColorScheme(android.R.color.white,android.R.color.holo_green_light,android.R.color.holo_orange_light, android.R.color.holo_red_light);list = new ArrayList<SoftwareClassificationInfo>();list.add(new SoftwareClassificationInfo(1, "asdas"));//得到這個重新整理ListView中的ListViewlistView = (ListView) findViewById(R.id.list);adapter = new ListViewAdapter(this, list);listView.setAdapter(adapter);/* * 個人總結:listView-----adapter * 先無論adapter是Adapter的類型【聚集類型】 * 實現adapter的ListView至少:資料【實體:JavaBean】、聚集【用來存放實體的聚集】、布局ListView或者 ListView相關子類【用來存放類容的】 * adapter【你用來適配聚集的的一個adapter】、讓布局和適配器聯絡起來【setAdapter】 */}public void onRefresh() {new Handler().postDelayed(new Runnable() {public void run() {swipeLayout.setRefreshing(false);list.add(new SoftwareClassificationInfo(2, "ass"));adapter.notifyDataSetChanged();}}, 3000);}}
總結:
一.SwipRefreshLayout主要方法:
setOnRefreshListener(OnRefreshListener): 為布局加入一個Listener
setRefreshing(boolean): 顯示或隱藏重新整理進度條
isRefreshing(): 檢查是否處於重新整理狀態
setColorScheme(): 設定進度條的顏色主題,最多能設定四種
二. 個人總結:listView-----adapter
* 先無論adapter是Adapter的類型【聚集類型】
* 實現adapter的ListView至少:資料【實體:JavaBean】、聚集【用來存放實體的聚集】、布局ListView 或者 ListView相關子類【用來存放類容的】
* adapter【你用來適配聚集的的一個adapter】、讓布局和適配器聯絡起來【setAdapter】
三.案例一用到了Handler,這裡再次總結一下:能夠看一下原始碼。很清晰。
andriod提供了Handler 和 Looper 來滿足線程間的通訊。Handler先進先出原則。Looper類用來管理特定線程內對象之間的訊息交換(MessageExchange)。
1)Looper: 一個線程能夠產生一個Looper對象。由它來管理此線程裡的MessageQueue(訊息佇列)。
2)Handler: 你能夠構造Handler對象來與Looper溝通。以便push新訊息到MessageQueue裡;或者接收Looper從Message Queue取出)所送來的訊息。
3) Message Queue(訊息佇列):用來存放線程放入的訊息。
4)線程:UIthread 通常就是main thread。而Android啟動程式時會替它建立一個MessageQueue。
1.Handler建立訊息
每個訊息都須要被指定的Handler處理,通過Handler建立訊息便能夠完畢此功能。Android訊息機制中引入了訊息池。
Handler建立訊息時首先查詢訊息池中是否有訊息存在,假設有直接從訊息池中取得,假設沒有則又一次初始化一個訊息執行個體。
使用訊息池的優點是:訊息不被使用時,並不作為記憶體回收,而是放入訊息池,可供下次Handler建立訊息時使用。訊息池提高了訊息對象的複用,降低系統記憶體回收的次數。訊息的建立流程所看到的。
2.Handler發送訊息
UI主線程初始化第一個Handler時會通過ThreadLocal建立一個Looper,該Looper與UI主線程一一相應。
使用ThreadLocal的目的是保證每個線程僅僅建立唯一一個Looper。之後其它Handler初始化的時候直接擷取第一個Handler建立的Looper。Looper初始化的時候會建立一個訊息佇列MessageQueue。至此。主線程、訊息迴圈、訊息佇列之間的關係是1:1:1。
Handler、Looper、MessageQueue的初始化流程所看到的:
Hander持有對UI主線程訊息佇列MessageQueue和訊息迴圈Looper的引用,子線程能夠通過Handler將訊息發送到UI線程的訊息佇列MessageQueue中。
3.Handler處理訊息
UI主線程通過Looper迴圈查詢訊息佇列UI_MQ。當發現有訊息存在時會將訊息從訊息佇列中取出。
首先分析訊息,通過訊息的參數推斷該訊息相應的Handler,然後將訊息分發到指定的Handler進行處理。
子線程通過Handler、Looper與UI主線程通訊的流程所看到的。
Android SwipeRefreshLayout 官方下拉重新整理控制項介紹—Handler原理—Adapter總結