代码改变世界

Xamarin.Android之下拉刷新

  y-z-f  阅读(5140)  评论(6编辑  收藏  举报

一、前言

当今任何一个App中只要存在列表,基本上都会使用下拉刷新,而身为Xamarin一族的我们自然也不会落后,下面笔者将带领大家在Xamarin下实现Android中的下拉刷新的效果。

 

二、准备工作

我们的下拉刷新可不是全手工自己实现,而是利用了第三方的库,大家可以选择任何一种方式进行下载:

1.Github下载(源码)

2.百度网盘(源码+笔者的DEMO)

 

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,当然第三方支持比较有限,现在只能支持ListViewGridViewExpandableListView以及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入口)实现的下拉效果图:

 

 

编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示