HarmonyOS 鸿蒙Next List列表组件局部刷新问题
HarmonyOS 鸿蒙Next List列表组件局部刷新问题
import { AppUtil, FileUtil } from ‘@pura/harmony-utils’;
import { CommonConstants } from ‘@qmp/core/src/main/ets/common/CommonConstants’;
import { RouteConstants } from ‘…/…/constants/RouteConstants’;
import CommonUtils from ‘…/…/utils/CommonUtils’;
import { SETTING_ITEM_ID, SettingItem, SettingListArray } from ‘…/…/viewmodel/setting/SettingViewModel’;
import { promptAction } from ‘@kit.ArkUI’;
export struct SettingList {
@State settingList: SettingItem[] = SettingListArray;
async aboutToAppear(): Promise<void> {
this.getCacheSize();
let aboutAppItem = this.settingList.find(item => item.id == SETTING_ITEM_ID.ITEM_ABOUT_APP)!!
aboutAppItem.subTitle = ‘v’ + await AppUtil.getVersionName()
}
private getCacheSize() {
let clearCacheItem = this.settingList.find(item => item.id == SETTING_ITEM_ID.ITEM_CLEAR_CACHE)!!;
// 缓存大小计算,file+cache的
clearCacheItem.subTitle = FileUtil.getFormatFileSize(
FileUtil.getFileDirSize(FileUtil.getFilesDirPath()) +
FileUtil.getFileDirSize(FileUtil.getCacheDirPath()));
}
build() {
List() {
ForEach(this.settingList, (item: SettingItem) => {
ListItem() {
Row() {
Text(item?.title)
.fontSize(16)
Blank()
if (item.subTitle) {
Text(item.subTitle)
.fontSize(16)
.fontColor($r(‘app.color.placeholder_color’))
}
Image($r(‘app.media.arrow_right’)).width(16).height(16)
}
.width(CommonConstants.FULL_PERCENT)
.padding({ left: 16, right: 16 })
.onClick(() => {
switch (item.id) {
case SETTING_ITEM_ID.ITEM_USER_INFO:
CommonUtils.routerPushPage(RouteConstants.USER_INFO_URL)
break
case SETTING_ITEM_ID.ITEM_CLEAR_CACHE:
promptAction.showDialog({
title: ‘确认清除缓存?’,
buttons: [
{
text: ‘取消’,
color: ‘#000000’
},
{
text: ‘确认’,
color: ‘#000000’
}
],
})
.then(async data => {
if (data.index == 1) {
await FileUtil.rmdir(FileUtil.getFilesDirPath())
await FileUtil.rmdir(FileUtil.getCacheDirPath())
this.getCacheSize()
}
})
.catch((err: Error) => {
})
break
case SETTING_ITEM_ID.ITEM_ABOUT_APP:
CommonUtils.routerPushPage(RouteConstants.ABOUT_APP_URL)
break
case SETTING_ITEM_ID.ITEM_PRIVACY_POLICY:
CommonUtils.openWebView(item?.info)
break
case SETTING_ITEM_ID.ITEM_PRIVACY_SETTING:
CommonUtils.routerPushPage(RouteConstants.PRIVATE_SETTING_URL)
break
}
})
}
.width(CommonConstants.FULL_PERCENT)
.height(56)
}, (item: SettingItem) => ("" + item.id?.toString() + item.subTitle?.toString()))
}
.divider({
strokeWidth: 0.5,
color: $r(‘app.color.common_border_color_1’),
startMargin: 16,
endMargin: 16
}) // 每行之间的分界线
.backgroundColor(Color.White)
.margin({ left: 16, right: 16 })
.borderRadius(‘10vp’)
}
}
代码如上,确认清除缓存后,通过getCacheSize()得知缓存大小为0B,打印结果亦是0B,实际list未刷新
更多关于HarmonyOS 鸿蒙Next List列表组件局部刷新问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
更多关于HarmonyOS 鸿蒙Next List列表组件局部刷新问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
关于HarmonyOS 鸿蒙Next List列表组件局部刷新问题,以下是一些解决方案:
在HarmonyOS中,要实现List组件的局部刷新,首先需要确保数据源的更新能够触发UI的重新渲染。这通常通过@State装饰器来实现,当@State变量发生变化时,UI会自动更新。
对于局部刷新,你可以通过更新数据源中特定元素的属性来实现。这时,需要使用@Observed装饰器来标记数据源中的类,以便系统能够监测到其属性的变化。同时,在子组件中使用@ObjectLink装饰器来链接到数据源中的对象,这样当对象属性变化时,子组件也会自动更新。
如果你已经按照上述方式操作,但局部刷新仍然存在问题,可能是因为数据更新方式不正确或存在其他代码问题。请检查你的代码,确保数据源更新和UI渲染的逻辑是正确的。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html 。