HarmonyOS 鸿蒙Next List列表组件局部刷新问题

发布于 1周前 作者 yibo5220 来自 鸿蒙OS

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’;

@Component

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

1 回复

更多关于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

回到顶部