说明

在本博客中,学习如何在Xamarin.Forms应用程序中设计一个可扩展的无限滚动的ListView。这个无限滚动函数在默认的Xamarin.Forms不存在,因此我们需要为此添加插件。在这里我们需要知道无限滚动时如何工作的。首先,显示固定的数据。一旦用户滚动到末尾,我们可以在列表的末尾添加更多的数据,这样,列表就会不断滚动,直到数据结束。

让我们开始吧

第一步

创建一个新的Xamarin.Forms工程,打开Visual Studio,点击新建->项目->在对话框中选择移动应用(Xamarin.Forms),并点击下一步**

(未使用原文图片)

第二步

接下来,出现一个新的对话框,在这里给出应用程序和解决方案的名称,名字为:XFInfiniteScroll,然后点击创建(未使用原文图片)

第三步

之后,在新的对话框窗口中,选择你的Xamarin.Forms应用模板类型和平台之后点击确定,在这里,我选择选项卡式模板和Android,iOS平台。因为这里选择空模板时,没有成功,改选用选项卡模板(未使用原文图片)

第四步

在项目创建完成之后,安装Xamarin.Forms.Extended.Infinitescrolling NuGet包。右键点击解决方案并选择管理解决方案的NuGet程序包,注:需要选中包括预发行版选项

第五步

现在,在项目XFInfiniteScroll 选中Models文件夹,右击添加一个类,名称为:InfiniteItems,代码如下:

namespace XFInfiniteScroll.Models
{public class InfiniteItems{public string Id { get; set; }public string Text { get; set; }public string Title { get; set; }public string Description { get; set; }}
}

第六步

继续在项目XFInfiniteScroll中,添加一个文件夹,名称为:FakeDataSource,在文件夹中添加一个相当于提供模拟数据的类,名称为:InfiniteDataItems,代码如下(占用空间较大,已删除,可以在Github上面阅读源码)

第七步

由于本项目采用的是选项卡模板,并且目前已使用Shell方式(可以参考:Xamarin.Forms Shell。修改AppShell.xaml文件代码如下:

    <TabBar><Tab Title="Infinite Scroll" Icon="icon_about.png"><ShellContent Title="Single"><local:SingleViewPage></local:SingleViewPage></ShellContent><ShellContent Title="Group"><local:GroupViewPage></local:GroupViewPage></ShellContent></Tab><ShellContentTitle="About"ContentTemplate="{DataTemplate local:AboutPage}"Icon="icon_about.png"Route="AboutPage" /><ShellContentTitle="Browse"ContentTemplate="{DataTemplate local:ItemsPage}"Icon="icon_feed.png" /></TabBar>

此处,对于TabbedPage的用法出现错误,因此只能采用此种方法处理页面的布局

在文件夹Views中分别添加SingleViewPageGroupViewPage内容页。直接在下面图片中修改文件名即可。

SingleViewPage页面布局

<?xml version="1.0" encoding="utf-8" ?>
<ContentPagex:Class="XFInfiniteScroll.Views.SingleViewPage"xmlns="http://xamarin.com/schemas/2014/forms"xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"xmlns:extended="clr-namespace:Xamarin.Forms.Extended;assembly=Xamarin.Forms.Extended.InfiniteScrolling"BackgroundColor="Red"><ContentPage.Content><ListViewx:Name="ListSingleItems"HasUnevenRows="True"HorizontalOptions="FillAndExpand"VerticalOptions="FillAndExpand"><ListView.Behaviors><extended:InfiniteScrollBehavior IsLoadingMore="{Binding IsWorking}"></extended:InfiniteScrollBehavior></ListView.Behaviors><ListView.ItemTemplate><DataTemplate><ViewCell><Grid Padding="12"><Grid.RowDefinitions><RowDefinition Height="20" /><RowDefinition Height="20" /></Grid.RowDefinitions><Label Grid.Row="0" Text="{Binding Text}"></Label><Label Grid.Row="1" Text="{Binding Description}"></Label></Grid></ViewCell></DataTemplate></ListView.ItemTemplate><ListView.Footer><Grid Padding="6"><LabelHorizontalOptions="Center"IsVisible="{Binding IsWorking}"Text="Loading..."VerticalOptions="Center"></Label></Grid></ListView.Footer></ListView></ContentPage.Content>
</ContentPage>

GroupViewPage页面布局

<?xml version="1.0" encoding="utf-8" ?>
<ContentPagex:Class="XFInfiniteScroll.Views.GroupViewPage"xmlns="http://xamarin.com/schemas/2014/forms"xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"xmlns:extended="clr-namespace:Xamarin.Forms.Extended;assembly=Xamarin.Forms.Extended.InfiniteScrolling"><ContentPage.Content><ListViewx:Name="GroupItems"HasUnevenRows="True"HorizontalOptions="FillAndExpand"IsGroupingEnabled="True"VerticalOptions="FillAndExpand"><ListView.Behaviors><extended:InfiniteScrollBehavior IsLoadingMore="{Binding IsWorking}" /></ListView.Behaviors><ListView.ItemTemplate><DataTemplate><ViewCell><Grid Padding="12"><Grid.ColumnDefinitions><ColumnDefinition Width="*"></ColumnDefinition></Grid.ColumnDefinitions><Grid.RowDefinitions><RowDefinition Height="20"></RowDefinition><RowDefinition Height="20"></RowDefinition></Grid.RowDefinitions><LabelGrid.Row="0"Text="{Binding Text}"TextColor="Black"></Label><LabelGrid.Row="1"Text="{Binding Description}"TextColor="Black"></Label></Grid></ViewCell></DataTemplate></ListView.ItemTemplate><ListView.GroupHeaderTemplate><DataTemplate><ViewCell Height="25"><Grid BackgroundColor="White"><LabelFontAttributes="None"FontSize="16"HorizontalTextAlignment="Center"Text="{Binding Header}"TextColor="Blue"VerticalTextAlignment="Center"></Label></Grid></ViewCell></DataTemplate></ListView.GroupHeaderTemplate><ListView.Footer><Grid Padding="6"><LabelHorizontalOptions="Center"IsVisible="{Binding IsWorking}"Text="Load..."TextColor="Black"VerticalOptions="Center"></Label></Grid></ListView.Footer></ListView></ContentPage.Content>
</ContentPage>

对于后台代码,可以在GitHub上面参考。https://github.com/mzy666888/XFInfiniteScroll

第八步

现在,可以运行你的Xamarin.Forms应用程序,并可以看到以下的输出内容。在本机上运行界面:视频地址(可以查看下一条的视频)或者移步到:https://www.zhihu.com/zvideo/1338425998501240832

看一下原文中的动图显示

由于iOS & Android运行结果动图的帧数超过300帧,上传失败,需要看的可以移步到知乎查看

— END —

「扩展阅读」

[GitHub] 75+的 C# 数据结构和算法实现

谁说.NET不适合搞BD,ML、AI

推荐一个集录屏、截图、音频于一体的软件给大家

10个用于C#.NET开发的基本调试工具

Xamarin.Forms 二维码扫描实践

在Asp.Net Core MVC 开发过程中遇到的问题总结

前端小白在asp.net core mvc中使用ECharts

基于Asp.Net Core MVC和AdminLTE的响应式管理后台之侧边栏处理

[译]如何在C#中调试LINQ查询

C# 语言性能提升方法

使用MQTTnet搭建Mqtt服务器

OxyPlot在WinForm中的应用

「公众号推荐」

回复:「redis」 获取5.0.9版的Windows安装包(exe)

回复:「ca」 获取  截图、GIF等工具三件套,便携版和安装版全部包括

回复:「新书」 获取《ASP.NET Core 3框架揭秘》购书链接

回复:「cv」 获取《OpenCV 4快速入门》购书链接

回复:「进阶」 获取 《CLR via C#(第4版)》购书链接

回复:「本质论」获取 《C# 7.0本质论》购书链接

回复:「WPF」获取 WPF 电子书

「加号主回复”入群“」即可加入群聊


Xamarin.Forms: 无限滚动的ListView(懒加载方式)相关推荐

  1. Android重点笔记,安卓listview 懒加载的实现笔记

    1.实现目的与用途 使用懒加载可降低单次访问后台的所获取的数据量,从而提高获取数据的速度,减少流量使用,加快UI界面的响应,提高用户体验度. 2.实现思路 两种实现思路: 1.先设定listview每 ...

  2. VUE项目中图片加载过大处理方式-渐进式方式-懒加载方式--附源码

    解决有两步: 1.采用渐进式加载:原图未加载完时显示比它内存小的模糊图: 2.采用懒加载:只加载可视区域的图片,即滚动到可视区域时再加载图片 vue-lazyload-img:VUE图片懒加载插件 v ...

  3. 懒加载方式下的单例模式

    一般的,我们编写单例模式往往直接在单例引用的时候,即把实例生成,采用private final static 的成员变量直接初始化掉,这种方法能适应大部分的场景,但有时候本单例模式可能还处理其他业务, ...

  4. Android无限滚动库mugen实现加载更多效果

    github:https://github.com/vinaysshenoy/mugen 效果图: 例子中结合使用了 SwipeRefreshLayout 和 RecyclerView 使用很简单 1 ...

  5. SAP Spartacus CMS Component的lazy loading懒加载方式

    代码如下: ConfigModule.withConfig({cmsComponents: {SimpleResponsiveBannerComponent: {component: () => ...

  6. Html图片懒加载动画,Intersection Observer实现滚动到相应区域执行动画及图片懒加载...

    Intersection observer API提供了一种方法,可以异步观察目标元素与祖先元素或相对于浏览器视口(root)的交集变化. 很多种情况下都需要用到元素交集变化的信息,例如:当页面滚动时 ...

  7. selenium截图模糊_Selenium截屏 图片未加载的问题解决--【懒加载】

    需求: 截屏后转PDF. 问题: selenium截屏后,图片未加载 如下图: 原因: 网站使用了懒加载技术:只有在浏览器中纵向滚动条滚动到指定的位置时,页面的元素才会被动态加载. 什么是图片懒加载? ...

  8. iframe懒加载_懒加载是如何实现的?

    作为网页内容的一部分,图像和视频通常要消耗很多资源加载.要提高网页应用的性能,如何避免资源浪费在加载图像和视频上就很重要了.但是,很多时候我们都不愿意减少网页上的媒体资源,所以我们经常无从下手.幸运的 ...

  9. js实现图片懒加载原理(marksheng)

    有时候一个网页会包含很多的图片,例如淘宝京东这些购物网站,商品图片多只之又多,页面图片多,加载的图片就多.服务器压力就会很大.不仅影响渲染速度还会浪费带宽.比如一个1M大小的图片,并发情况下,达到10 ...

最新文章

  1. 谁说程序员干不过写ppt的,码农就该这样雄起
  2. apache动态编译/静态编译区别
  3. EF6 CodeFirst+Repository+Ninject+MVC4+EasyUI实践(六)
  4. 优雅的找出ArrayList中重复的元素
  5. esxi虚机启动慢的问题
  6. C++ 链表 leetcode习题总结
  7. 【OpenCV】边缘检测
  8. python应用系列教程——python使用socket创建tcp服务器和客户端
  9. Android对话框的高级设置《二》设置对话框按钮的透明度和对话框的在屏幕上的显示位置
  10. 空间数据挖掘主要方法
  11. shell日期加减及数组循环
  12. 有史以来最容易理解的控制反转(IoC)与注入依赖(DI)
  13. 使用linux提交pbs任务:运行matlab或perl程序
  14. 433MHz遥控器loop天线方案 CA-S01 CrossAir贴片天线
  15. 计算机二级成绩划分标准,计算机二级成绩划分标准
  16. 离线强化学习(Offline RL)系列1:离线强化学习原理入门
  17. 拳头的国人动画师,是这样让《英雄联盟》里的角色变成“戏精”的
  18. 【C语言】浮点型数据在内存中的存储方式
  19. 高通平台QCRILD
  20. word中自动生成的目录中,编号和文本间距过大

热门文章

  1. Acer 4750 安装黑苹果_黑苹果系统安装通用教程图文版
  2. [sol]250OJ 1~10
  3. Linux下画原理图和PCB
  4. Axure RP使用攻略--动态面板的用途(8)
  5. SQLServer2008-镜像数据库实施手册(双机)SQL-Server2014同样适用
  6. 数组的几种排序算法的实现(1)
  7. Oracle session连接数和inactive的问题记录【转】
  8. 下载spotify音乐_如何在Spotify上播放更高质量的音乐
  9. 一站式解决,Android 拍照 图库的各种问题
  10. 剑指OFFER的跳台阶问题