欢迎来到鸿蒙5.0开发实战系列!本系列将带领大家通过一个完整的“黑马云音乐”App案例,一步步掌握HarmonyOS应用开发的核心技术。本文是该系列的第一篇,聚焦于首页中最常见的“猜你喜欢”列表布局实现。我们将使用HarmonyOS 5.0的声明式UI和Java能力(兼容API 9+),从零开始搭建一个可滚动的、数据驱动的推荐列表,让你彻底理解HarmonyOS开发实战中列表组件的使用套路。
📌 本篇文章你将学到:
首先,打开DevEco Studio(推荐最新版本),创建一个空Ability的Java工程,选择SDK版本为鸿蒙5.0(API 9+)。项目名称为“HeimaMusic”。由于本系列不涉及复杂后端,所有数据我们将在本地模拟。无需额外依赖,直接使用HarmonyOS SDK自带组件即可。
在resources/base/layout下新建一个布局文件item_guess.xml,用于展示每一个推荐歌曲的卡片。我们采用DirectionalLayout垂直排列,内部包含一个Image(专辑图)、两个Text(歌曲名和歌手)和一个Button(操作按钮)。为了实现美观,我们使用列表布局常见的卡片样式,设置圆角、边距和阴影。下面是布局源码:
注意:这里使用了占位图片ic_default_album,你需要提前准备或在代码中动态加载网络图片。本示例为简化,使用本地媒体资源。
在主布局中,我们只需要一个ListContainer组件,并给它一个id。为了让界面更真实,可以加上顶部的标题栏。布局代码如下:
这个布局非常简单,ListContainer会负责展示我们之前定义的列表项。
在java包下新建一个实体类SongBean,包含歌曲名称、歌手、图片资源ID(或URL)。为了体现鸿蒙5.0开发的特性,我们可以使用Parcelable序列化以便后续传递,但这里简单起见,只写普通JavaBean即可。
public class SongBean { private String songName; private String artist; private int imageResId; public SongBean(String songName, String artist, int imageResId) { this.songName = songName; this.artist = artist; this.imageResId = imageResId; } // getter/setter 省略(实际代码需要补充)} 在HarmonyOS开发实战中,自定义适配器需要继承RecycleItemProvider并重写关键方法。我们创建一个GuessAdapter类,持有数据列表和上下文,在getSubView方法中加载列表项布局并绑定数据。同时可以设置按钮的点击监听。以下是核心代码片段:
public class GuessAdapter extends RecycleItemProvider { private List list; private AbilitySlice slice; public GuessAdapter(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 getSubView(int position, Component convertComponent, ComponentContainer parent) { Component component = convertComponent; if (component == null) { component = LayoutScatter.getInstance(slice).parse(ResourceTable.Layout_item_guess, null, false); } SongBean bean = list.get(position); // 初始化子组件 Image imgAlbum = (Image) component.findComponentById(ResourceTable.Id_img_album); Text tvSong = (Text) component.findComponentById(ResourceTable.Id_tv_song_name); Text tvArtist = (Text) component.findComponentById(ResourceTable.Id_tv_artist); Button btnPlay = (Button) component.findComponentById(ResourceTable.Id_btn_play); imgAlbum.setImageResource(bean.getImageResId()); tvSong.setText(bean.getSongName()); tvArtist.setText(bean.getArtist()); btnPlay.setClickedListener(component1 -> { // 播放逻辑,可跳转或弹出提示 new ToastDialog(slice).setText("播放:" + bean.getSongName()).show(); }); return component; }} 最后,在MainAbilitySlice的onStart方法中,获取ListContainer实例,准备模拟数据,并设置适配器。代码如下:
@Overridepublic void onStart(Intent intent) { super.onStart(intent); super.setUIContent(ResourceTable.Layout_ability_main); ListContainer listContainer = (ListContainer) findComponentById(ResourceTable.Id_list_guess); List list = new ArrayList<>(); list.add(new SongBean("像风一样自由", "许巍", ResourceTable.Media_ic_music1)); list.add(new SongBean("成都", "赵雷", ResourceTable.Media_ic_music2)); list.add(new SongBean("平凡之路", "朴树", ResourceTable.Media_ic_music3)); // 更多数据... GuessAdapter adapter = new GuessAdapter(list, this); listContainer.setItemProvider(adapter); // 设置列表项点击事件(可选) listContainer.setItemClickedListener((listContainer1, component, i, l) -> { SongBean bean = list.get(i); new ToastDialog(this).setText("点击了:" + bean.getSongName()).show(); });} 至此,一个完整的“猜你喜欢”列表布局就完成了。运行项目,你将看到可滚动列表,每个项目包含图片、文字和按钮,点击按钮会弹出提示。
💡 下集预告:
在下一篇中,我们将继续完善黑马云音乐项目,实现顶部轮播图(Banner)的列表布局,并讲解如何使用PageSlider实现无限轮播,敬请期待!
—— 本文关键词:鸿蒙5.0开发、黑马云音乐、列表布局、HarmonyOS开发实战 ——
本文由主机测评网于2026-02-14发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://vpshk.cn/20260225226.html