当前位置: 首页 > news >正文

鸿蒙列表,类似于安卓的RecyclerView

鸿蒙中想要实现安卓的RecyclerView效果,对于安卓开发者来说还是比较容易的的,基本写法如下:

首先在布局文件中声明

        <ListContainerohos:id="$+id:lc_list"ohos:top_margin="20vp"ohos:height="40vp"ohos:start_margin="150vp"ohos:end_margin="150vp"ohos:orientation="horizontal"ohos:width="match_parent"/>

从上述代码中看到 有一个 orientation 属性,那就说明鸿蒙中的列表滑动方向是可以在控件中直接声明的

鸿蒙中的列表也需要适配器如下:
可以看到也可以写一个 ViewHolder 来做数据缓冲,这里的布局文件就不写出来了,和安卓一样的,查找控件,根据逻辑赋值处理

public class DeviceTAdapter extends RecycleItemProvider {private List<String> data;LayoutScatter layoutScatter;public DeviceTAdapter(Context context, List<String> data) {this.data = data;this.layoutScatter = LayoutScatter.getInstance(context);}@Overridepublic int getCount() {return data.size();}public Object getData(){return  data;}@Overridepublic Object getItem(int i) {if (data != null && i >= 0 && i < data.size()) {return data.get(i);}return null;}@Overridepublic long getItemId(int i) {return i;}@Overridepublic Component getComponent(int i, Component component, ComponentContainer componentContainer) {ViewHolder viewHolder = null;if (component == null) {component = layoutScatter.parse(ResourceTable.Layout_item_device_title, null, false);viewHolder = new ViewHolder((ComponentContainer) component);component.setTag(viewHolder);} else {viewHolder = (ViewHolder) component.getTag();}String mD = data.get(i);viewHolder.tvItemName.setText(mD);return component;}static class ViewHolder {Text tvItemName;public ViewHolder(ComponentContainer componentContainer) {tvItemName = (Text) componentContainer.findComponentById(ResourceTable.Id_text_name);}}
}

在 AbilitySlice 找到我们的列表控件,添加适配器即可

        ListContainer  lcList = (ListContainer) findComponentById(ResourceTable.Id_lc_list);DeviceTAdapter mAdapter = new DeviceTAdapter(DeviceAbilitySlice.this,areaLists);lcList.setItemProvider(mAdapter);lcList.setItemClickedListener(new ListContainer.ItemClickedListener() {@Overridepublic void onItemClicked(ListContainer listContainer, Component component, int i, long l) {//更新选中样式ArrayList<AreaList> mData = (ArrayList<AreaList>) mAdapter.getData();for (AreaList device: mData){device.setSelect(false);}AreaList areaList = mData.get(i);areaList.setSelect(true);mAdapter.notifyDataChanged();}});

通过上述代码可以看到,列表的点击事件通过 列表控件来获取,我一般在安卓开发中都是通过适配器来获取的,这边是有些区别的,刷新适配器同样也是有 notify 方法使用

根据源码可以看到

在这里插入图片描述
这里也是支持对单个 item 操作的

那么列表想要实现 几行几列怎么实现呢,安卓可以动态设置布局管理器,我们鸿蒙当然也不例外,就项目而言,我想要实现 两行,每行显示四个如何实现呢

在这里插入图片描述

        ListContainer lcList = (ListContainer) cpt.findComponentById(ResourceTable.Id_lc_list);TableLayoutManager layoutManager = new TableLayoutManager();layoutManager.setColumnCount(4);lcList.setLayoutManager(layoutManager);

通过上述代码可以看到我使用了 setColumnCount 方法,每行显示四个,此时我只要确保传入适配器的数量为八个就能实现 两行每行显示四个 总共八个子控件的效果,我们点开表格管理器看一下

在这里插入图片描述

果然不出所料,我既然能设置每行数量,也是能设置列数的,这里等你深入探索了

以上就是我在鸿蒙项目如何使用列表的过程了~

相关文章:

  • 虚拟机Linux-Centos系统网络配置常用命令+Docker 的常用命令
  • 2023年11月编程语言流行度排名
  • 写论文中的心得记录
  • AVL树 c语言版本 插入部分
  • 01-基于IDEA,Spring官网,阿里云官网,手动四种方式创建SpringBoot工程
  • 5分钟Python安装实战(MAC版本)
  • MapReduce:大数据处理的范式
  • Naocs配置中心配置映射List、Map、Map嵌套List等方式
  • Chatgpt人工智能对话源码系统分享 带完整搭建教程
  • lua脚本实现redis分布式锁(脚本解析)
  • vscode + cmake + opencv example
  • 企业防范数据安全的重要性与策略
  • Docker 用centos 编译安装apache
  • 【分布式事务】初步探索分布式事务的概率和理论,初识分布式事的解决方案 Seata,TC 服务的部署以及微服务集成 Seata
  • 【PG】PostgreSQL13主从流复制部署(详细可用)
  • SegmentFault for Android 3.0 发布
  • 【RocksDB】TransactionDB源码分析
  • fetch 从初识到应用
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • Otto开发初探——微服务依赖管理新利器
  • Rancher-k8s加速安装文档
  • STAR法则
  • windows下使用nginx调试简介
  • 每天10道Java面试题,跟我走,offer有!
  • 前端技术周刊 2019-01-14:客户端存储
  • 让你的分享飞起来——极光推出社会化分享组件
  • ​io --- 处理流的核心工具​
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • #传输# #传输数据判断#
  • #预处理和函数的对比以及条件编译
  • $(selector).each()和$.each()的区别
  • (1)bark-ml
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (WSI分类)WSI分类文献小综述 2024
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (原)本想说脏话,奈何已放下
  • (转)甲方乙方——赵民谈找工作
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .Net各种迷惑命名解释
  • .NET关于 跳过SSL中遇到的问题
  • .net和jar包windows服务部署
  • .NET委托:一个关于C#的睡前故事
  • .skip() 和 .only() 的使用
  • .so文件(linux系统)
  • [\u4e00-\u9fa5] //匹配中文字符
  • [ABC294Ex] K-Coloring
  • [Asp.net mvc]国际化
  • [Design Pattern] 工厂方法模式
  • [GDOUCTF 2023]<ez_ze> SSTI 过滤数字 大括号{等
  • [jquery]this触发自身click事件,当前控件向上滑出