一、前言
當今任何一個App中只要存在列表,基本上都會使用下拉刷新,而身為Xamarin一族的我們自然也不會落后,下面筆者將帶領大家在Xamarin下實現Android中的下拉刷新的效果。
二、准備工作
我們的下拉刷新可不是全手工自己實現,而是利用了第三方的庫,大家可以選擇任何一種方式進行下載:
PS:如果讀者選擇從Github上下載需要修改引用的文件,將源碼的v4刪掉,重新引用新的v4。
三、正文
該下拉刷新並不同於官方的下拉刷新DEMO,官方采用的是利用ActionBar呈現刷新狀態的,但是我們正常使用的App都是通過下拉呼出下拉刷新,而該第三方下拉刷新需要我們修改layout下的axml文件才能正常使用,比如我們需要ListView支持下拉刷新就需要按照如下的方式修改axml文件:
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:orientation="vertical" 4 android:layout_width="fill_parent" 5 android:layout_height="fill_parent"> 6 <PullToRefresharp.Android.Views.ViewWrapper 7 android:layout_width="fill_parent" 8 android:layout_height="fill_parent"> 9 <PullToRefresharp.Android.Widget.ListView 10 android:layout_width="match_parent" 11 android:layout_height="wrap_content" 12 android:id="@+id/listview1" /> 13 </PullToRefresharp.Android.Views.ViewWrapper> 14 </LinearLayout>
其中ViewWrapper是必須的,它的子控件ListView可不是系統自帶的那個控件,我們必須使用自帶的,當然讀者不需要擔心它跟系統自帶的ListView有什么區別,實質上第三方就是繼承自ListView,當然第三方支持比較有限,現在只能支持ListView、GridView、ExpandableListView以及ScrollView。
接着我們回到MainActivity.cs中,寫入如下的代碼,監聽ListView的RefreshActivated事件,並且模擬加載延遲然后調用ListView的OnRefreshCompleted方法完成加載:
1 protected override void OnCreate(Bundle bundle) 2 { 3 base.OnCreate(bundle); 4 SetContentView(Resource.Layout.Main); 5 6 lv = FindViewById<PullToRefresharp.Android.Widget.ListView>(Resource.Id.listview1); 7 lv.Adapter = new ArrayAdapter(this, Android.Resource.Layout.SimpleListItem1, ITEMS); 8 lv.RefreshActivated += (e,s) => 9 { 10 Task.Factory.StartNew(() => 11 { 12 Thread.Sleep(1000); 13 RunOnUiThread(() => 14 { 15 lv.OnRefreshCompleted(); 16 }); 17 }); 18 }; 19 }
其中ITEMS的內容如下所示:
1 private static string[] ITEMS = new string[] {"Abbaye de Belloc", "Abbaye du Mont des Cats", "Abertam","Abondance", "Ackawi", "Acorn", "Adelost", "Affidelice au Chablis", "Afuega'l Pitu","Airag", "Airedale", "Aisy Cendre", "Allgauer Emmentaler", "Abbaye de Belloc","Abbaye du Mont des Cats", "Abertam", "Abondance", "Ackawi", "Acorn", "Adelost","Affidelice au Chablis", "Afuega'l Pitu", "Airag", "Airedale", "Aisy Cendre","Allgauer Emmentaler"};
然后一個簡單的下拉刷新就完成了,我們來看看我們的成果吧:



如果讀者需要自定義這部分只需要在ViewWrapper與ListView之間添加一個LinearLayout控件,里面寫上自定義的內容即可,當然這其中的各種動畫效果自然也要自己實現了,筆者這里就不詳細介紹了,作為福利,再給大家看看官方采用ActionBar(Github入口)實現的下拉效果圖:


