自学鸿蒙应用开发(16)- ListContainer

网友投稿 599 2022-11-12 18:15:05

自学鸿蒙应用开发(16)- ListContainer

本文介绍在鸿蒙应用中ListContainer组件的基本用法。

ListContainer

准备ListContainer页面布局

在layout目录下的xml文件中创建ListContainer布局,将其命名为page_listcontainer.xml。

代码中组件id被指定为list_container,页面代码中可以使用这个id获取ListContainer对象。最后几个关于scrollbar的设定项目用于在画面右侧生成一个不会消失的滚动条,以显示当前的滚动位置和范围。

准备列表项布局

开发者可以为列表项准备不同的布局。首先在layout目录下新建item_sample_red.xml文件,其内容是红色、非倾斜字体,大小为20fp:

类似地,也可以在layout目录下新建item_sample_green.xml文件,其内容是绿色、倾斜字体,大小为50fp:

至此,布局的准备就告一段落。

准备列表模型类

ListContainer在实际动作时,需要和一个列表数据类进行交互,这个类的最低需求是提供下面的接口

方法

作用

int getCount()

返回填充的表项个数。

Object getItem(int position)

根据position返回对应的数据。

long getItemId(int position)

返回某一项的id。

Component getComponent(int position, Component covertComponent,ComponentContainer componentContainer)

根据position返回对应的界面组件。

为此这里准备如下的SampleItemProvider类并实现上述接口:

ckage com.example.helloharmony;import ohos.aafwk.ability.AbilitySlice;import ohos.agp.components.*;import java.util.List;public class SampleItemProvider extends RecycleItemProvider { private List list; private AbilitySlice slice; public SampleItemProvider(List list, AbilitySlice slice) { this.list = list; this.slice = slice; } @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } @Override public Component getComponent(int position, Component convertComponent, ComponentContainer componentContainer) { SampleItem sampleItem = list.get(position); Component cpt = convertComponent; if(cpt == null || cpt.getId() != sampleItem.getLayout()) { cpt = LayoutScatter.getInstance(slice).parse(sampleItem.getLayout(), null, false); } Text text = (Text) cpt.findComponentById(sampleItem.getItem()); text.setText(sampleItem.getName()); return cpt; }}

SampleItemProvider的主要功能是利用SampleItem列表项list的来实现ListContainer所需的接口。略微复杂一点的是getComponent方法,它利用SampleItem提供的信息生成画面组件。开发者可以根据实际需要调整该方法和SampleItem的设计。

生成列表数据

修改画面类为列表准备表示数据。

package com.example.helloharmony.slice;import com.example.helloharmony.ResourceTable;import com.example.helloharmony.SampleItem;import com.example.helloharmony.SampleItemProvider;import ohos.aafwk.ability.AbilitySlice;import ohos.aafwk.content.Intent;import ohos.agp.components.Component;import ohos.agp.components.ListContainer;import java.util.ArrayList;import java.util.List;public class ListAbilitySlice extends AbilitySlice { @Override public void onStart(Intent intent) { super.onStart(intent); super.setUIContent(ResourceTable.Layout_page_listcontainer); initListContainer(); } private void initListContainer() { ListContainer listContainer = (ListContainer) findComponentById(ResourceTable.Id_list_container); listContainer.enableScrollBar(Component.AXIS_Y, true); listContainer.setScrollbarRoundRect(true); listContainer.setScrollbarRadius(listContainer.getScrollbarThickness() / 2); List list = getData(); SampleItemProvider sampleItemProvider = new SampleItemProvider(list,this); listContainer.setItemProvider(sampleItemProvider); } private ArrayList getData() { ArrayList list = new ArrayList<>(); for (int i = 0; i <= 80; i++) { if((i % 2) == 0) { list.add(new SampleItem("Even" + i / 2, ResourceTable.Layout_item_sample_red, ResourceTable.Id_item_index)); } else { list.add(new SampleItem("Odd"+ i / 2, ResourceTable.Layout_item_sample_green, ResourceTable.Id_item_index)); } } return list; }

代码16行~20行为画面指定ListContainer布局之后,在initListContainer方法(第21行~第29行)中对ListContainer的滚动条进行控制并调用getData方法生成列表数据。getData简单地根据索引的奇偶性生成不同文字,不同布局的SampleItem。此处同样代码可以根据实际开发的需求加以修改。

画面显示如下:

参考文档

ListContainer组件

​​的标准GUI 工具包tkinter,通过可执行的示例对23 个设计模式逐个进行说明。这样一方面可以使读者了解真实的软件开发工作中每个设计模式的运用场景和想要解决的问题;另一方面通过对这些问题的解决过程进行说明,让读者明白在编写代码时如何判断使用设计模式的利弊,并合理运用设计模式。

对设计模式感兴趣而且希望随学随用的读者通过本书可以快速跨越从理解到运用的门槛;希望学习Python GUI 编程的读者可以将本书中的示例作为设计和开发的参考;使用Python 语言进行图像分析、数据处理工作的读者可以直接以本书中的示例为基础,迅速构建自己的系统架构。

觉得本文有帮助?请分享给更多人。

面向对象开发,面向对象思考!

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Spring三级缓存解决循环依赖
下一篇:C++核心准则​Pro.safety:类型安全准则群组
相关文章