花粉乐分享平台宣传视频
> 华为资讯 > 华为资讯 > 鸿蒙编程 > 鸿蒙app开发-一个简单的商品展示页
鸿蒙app开发-一个简单的商品展示页
来源:lehoon
2023-02-22 15:39:04
803
管理
目标

本次主要目标是实现一个简单的商品展示列表页, 包括商品缩略图,商品名称、商品编号、商品库存。 事件处理暂时不添加。

效果如下:

效果图

代码实现

MainAbilitySlice使用了ListHolder实现数据管理

public class MainAbilitySlice extends AbilitySlice { private ListHolder listHolder; @Override public void onStart(Intent intent) { listHolder = new ListHolder(this); setUIContent(listHolder.createComponent()); } @Override public void onActive() { super.onActive(); } @Override public void onForeground(Intent intent) { super.onForeground(intent); }}

声明一个DataHolder, ListHolder

public class ListHolder { private static final String TAG = "ListHolder"; private AbilitySlice mSlice; private ComponentContainer mRootLayout; private ListContainer listContainer; private ListItemProvider listItemProvider; public ListHolder(AbilitySlice abilitySlice) { mSlice = abilitySlice; listItemProvider = new ListItemProvider(abilitySlice); } public ComponentContainer createComponent() { Component mainComponent = LayoutScatter.getInstance(mSlice).parse(ResourceTable.Layout_ability_main, null, false); if (!(mainComponent instanceof ComponentContainer)) { return null; } mRootLayout = (ComponentContainer) mainComponent; listContainer = (ListContainer) mRootLayout.findComponentById(ResourceTable.Id_list); listContainer.setItemProvider(listItemProvider); return mRootLayout; }}

具体负责数据与控件绑定关系的是ListItemProvider

public class ListItemProvider extends RecycleItemProvider { private List goodEntityList = new ArrayList(10); private AbilitySlice mSlice; ListItemProvider(AbilitySlice abilitySlice) { mSlice = abilitySlice; initGoodData(); } @Override public long getItemId(int i) { if (i >= goodEntityList.size()) return 0; return goodEntityList.get(i).getId(); } @Override public int getCount() { return goodEntityList.size(); } @Override public Component getComponent(int position, Component convertView, ComponentContainer parent) { Component component = LayoutScatter.getInstance(mSlice).parse(ResourceTable.Layout_list_item, null, false); if (!(component instanceof ComponentContainer)) { return null; } if(position < goodEntityList.size()) { GoodEntity goodEntity = goodEntityList.get(position); ComponentContainer rootLayout = (ComponentContainer) component; /** * 图片 */ PixelMap pixelMap = createPixelMap(goodEntity.getImageUrl()); if (pixelMap != null) { Image image = (Image) rootLayout.findComponentById(ResourceTable.Id_good_image); image.setPixelMap(pixelMap); } Text goodIdText = (Text) rootLayout.findComponentById(ResourceTable.Id_good_id); goodIdText.setText(goodEntity.getId() ""); Text goodNameText = (Text) rootLayout.findComponentById(ResourceTable.Id_good_name); goodNameText.setText(goodEntity.getName()); Text goodStockText = (Text) rootLayout.findComponentById(ResourceTable.Id_good_stock); goodStockText.setText(goodEntity.getStock() ""); return component; } return null; } /** * 暂时固定数据源,后期使用网络获取远程服务器上的商品列表信息 */ private void initGoodData() { GoodEntity good001 = new GoodEntity(); good001.setId(10000L); good001.setName("香菇肥牛酱肥牛 80g/袋"); good001.setImageUrl("1.png"); good001.setStock(3000L); goodEntityList.add(good001); GoodEntity good002 = new GoodEntity(); good002.setId(10001L); good002.setName("可比克薯片 烧烤味 45g/罐"); good002.setImageUrl("2.jpg"); good002.setStock(5011L); goodEntityList.add(good002); GoodEntity good003 = new GoodEntity(); good003.setId(10003L); good003.setName("洽洽香瓜子 大包装 200g/包"); good003.setImageUrl("3.jpg"); good003.setStock(3000L); goodEntityList.add(good003); } /** * 创建PixelMap图片内存对象,该对象可以直接渲染到控件image上 * @param fileName * @return */ private PixelMap createPixelMap(String fileName) { String filePath = String.format("assets/entry/resources/rawfile/image/%s", fileName); InputStream snputStream = this.getClass().getClassLoader().getResourceAsStream(filePath); if(snputStream == null) { return null; } try { //ImageSource.SourceOptions srcOpts = new ImageSource.SourceOptions(); //srcOpts.formatHint = "image/jpeg"; ImageSource.DecodingOptions decodingOptions = new ImageSource.DecodingOptions(); /**图片缩放200*200*/ decodingOptions.desiredSize = new Size(200,200); ImageSource imageSource = ImageSource.create(snputStream, null /*srcOpts*/); PixelMap pixelMap = imageSource.createPixelmap(decodingOptions); imageSource.release(); return pixelMap; } catch (RuntimeException e) { e.printStackTrace(); } return null; }}

布局文件ability_layout.xml

商品列表控件list_item.xml

花粉社群VIP加油站

2
点赞
赏礼
赏钱
0
收藏
免责声明:本文仅代表作者个人观点,与花粉乐分享无关。其原创性以及文中陈述文字和内容未经本网证实,对本文以及其中全部或者 部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
凡本网注明 “来源:XXX(非花粉乐分享)”的作品,均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对 其真实性负责。
如因作品内容、版权和其它问题需要同本网联系的,请在一周内进行,以便我们及时处理。
QQ:2443165046 邮箱:info@hflfx.com
关于作者
华为绍天(采蜜高手)
文章
540
主题
0
关注
0
粉丝
0
点击领取今天的签到奖励!
签到排行
随手拍
54个圈友 0个话题
华为手机随手拍,记录生活点滴之美好
华为P30pro
51个圈友 0个话题
这里是华为P30pro手机交流圈,欢迎华为P30pro用户进群交流
体验官
60个圈友 2个话题
华为花粉体验官,体验官专属的交流群
登录后查看您创建的圈子
登录后查看您创建的圈子
所有圈子
杭州互联网违法和不良信息举报平台 网络110报警服务 浙ICP备17046585号
2
0
分享
请选择要切换的马甲:

个人中心

每日签到

我的消息

内容搜索