
【HarmonyOS】PageSlider组件使用(二)Provider介绍 原创 精华
一、简要概述
PageSliderProvider是为PageSlider组件提供用于管理页面视图的页面适配器。
PageSliderProvider类提供页面项管理功能,例如计算可用视图的数量和在指定位置创建组件。您需要继承并实现PageSliderProvider,以便在不同的页面上显示多个视图。
PageSliderProvider类的使用比较简单,但在复杂业务场景下使用时,需要做的工作比较多,而且这些工作都有重复性。所以在编写本章节案例的同时,我对PageSliderProvider进行了一下通用封装,并且把代码共享到了码云Gitee上,同时将封装的代码打包成har包,提交到了Maven中央仓库,供大家使用。
二、方法介绍
需要掌握的PageSliderProvider类方法不多,一般只需要重写下面四个方法即可为PageSlider提供Page数据支持。
方法名 | 作用 |
---|---|
getCount() | 获取可用Page页视图的数量。 |
createPageInContainer(ComponentContainer componentContainer, int position) | 在指定位置创建Page页面。 |
destroyPageFromContainer(ComponentContainer componentContainer, int i, Object o) | 销毁容器中的指定Page页面。 |
isPageMatchToObject(Component component, Object o) | 视图是否关联指定对象。 |
PageSliderProvider类还提供了Page页面数据刷新需要用到的方法,这部分方法可以相互配合,达到精准更新Page页面数据。
方法名 | 作用 |
---|---|
notifyDataChanged() | 当页面数据集更改通知到PageSliderProvier刷新页面 |
getPageTitle(int position) | 获取指定位置页面的标题。 |
getPageIndex(Object object) | 获取容器中对象的索引。 |
startUpdate(ComponentContainer componentContainer) | 获取可用Page页视图的数量。 |
onUpdateFinished(ComponentContainer componentContainer) | 在指定位置创建Page页面。 |
addDataSubscriber(DataSetSubscriber subscriber) | 从当前PageSliderProvider添加订阅服务。 |
removeDataSubscriber(DataSetSubscriber subscriber) | 从当前PageSliderProvider移除订阅服务。 |
三、封装解析
PageSliderProvider是一个abstract抽象类,每次使用此类的时候都需要继承它,并重写相应的抽象方法。这种重复的工作,写多了,既繁琐,又浪费时间,降低开发效率。所以秉着高效易用的目的,先对PageSliderProvider进行一定封装。
数据源的封装。在常规业务开发模式中,为PageSliderProvider提供页面元数据是最基础的工作,一般都是将一个复杂的Object对象实例集合加入到一个List列表中。考虑数据的通用性,这里我们也将采用泛型来封装PageSliderProvider类。
在重写PageSliderProvider类的getCount()抽象方法时,对此方法使用了final关键字修饰,目的是为了防止子类继承重写,导致出现问题。
页面视图组件的封装。页面视图组件是嵌入式设备应用开发中最需要关心的一件事情,嵌入式设备因内存资源是有限的的,而页面视图组件占用内存资源都还比较大,处理不好,甚至影响应用的流畅性和稳定性。所以在对页面视图组件封装时,需要考虑视图组件的快速创建和及时回收,防止内存泄露/溢出等问题。
在以往的应用开发经验中,ViewHolder绑定视图组件是一种非常高效解决视图组件回收复再利用的好模式。本次我们也使用这种ViewHolder模式来封装页面视图组件,并在PageSliderProvider类中进行简单的组件回收和再利用处理。
创建一个PageViewHolder类,用于绑定页面视图组件。在PageViewHolder类中进行简单的视图组件封装,业务开发中继承本类,去实现更多跟复杂的组件操作。
具体的业务开发中,使用的ViewHolder肯定是PageViewHolder的子类,是无法确定具体的实例对象类型的。所以在重写PageSliderProvider类的时候,我们也需要采用泛型来达到通用性。
页面视图组件的回收和再利用,常规简单操作我们都是使用列表或者队列进行存储,模拟回收站功能。在创建组件和销毁组件的方法中进行再利用和回收操作,已达到可以反复循环利用的目的,减少页面视图组件的多次创建带来的性能消耗。
四、应用实战
经过一系列的简单封装,PageSliderProvider类使用起来就简单了。我们就不需要再去为页面数据和组件的绑定,重复的去造轮子。直接从BasePageSliderProvider类继承,重写onCreatePageViewHolder和onBindPageViewHolder两个方法,直接绑定数据即可完成PageSlider组件的数据和页面组件的提供。
-
在工程layout目录下的创建Page页面布局文件。比如:component_page.xml
-
继承PageViewHolder类,绑定Page页面布局组件。比如:CasePageViewHolder
-
继承BasePageSliderProvider类,绑定Page页面数据源和PageViewHolder。
-
初始Page页面元数据和PageSlider组件,并将PageSliderProvider对象绑定到PageSlider组件中。
五、总结
这里只是简单的对PageSliderProvider类进行了一下封装试用,并将代码提交到了码云Gitee仓库,并进行了Maven中央仓库管理。PageSliderProvider类其实还可以进行更多功能改造,封装的更加高效易用,如果有意向,可以直接在码云Gitee仓库进行代码共享哦。
