HarmonyOS 鸿蒙Next中列表中的Item刷新无反应

HarmonyOS 鸿蒙Next中列表中的Item刷新无反应

列表中有个点赞按钮,点击后需要将点赞图标置亮或者灭,现在遇到问题是点击后图片没有变化,但DEBUG能看到点赞逻辑是走完的,就是这个图片不会变。为了不让图片闪烁所以用了ObjectLink。 这是具体的代码:

@Component 
export default struct VideoItemPage1 {
    @State private dataSource: BaseDataSourceWrapper<News1> = new BaseDataSourceWrapper<News1>([])

    build() {
        Column() {
            List() {
                LazyForEach(this.dataSource, (item: News1, index: number) => {
                    ListItem() {
                        ChildItem({
                            item1: item,
                            onHotClick: (news, isAdd) => {
                                if (isAdd) {
                                    news.isHot = true
                                    news.NewsHot++
                                } else {
                                    news.isHot = false
                                    news.NewsHot--
                                }
                            }
                        }).padding({ top: 8, bottom: 8 })
                    }
                }, (index: number) => String(index))
            }
            .divider({ strokeWidth: 1, color: '#f6f6f6' })
            .width('100%')
            .height('100%')
            .backgroundColor(Color.White)
            .listDirection(Axis.Vertical) // 排列方向
            .edgeEffect(EdgeEffect.None)
            .scrollBar(BarState.Off)
        }
    }
}

@Observed 
export class News1 {
    public NewsID: number = 0;
    public NewsThumbs: string = ''; //是否点赞 true:已点赞 false:未点赞
    public isHot:boolean = false
    public NewsHot: number = 0;
}

@Component 
struct ChildItem {
    @ObjectLink item1: News1
    onHotClick?: (news: News1, isAdd: boolean) => void 

    build() {
        Column() {
            Image(this.item1.NewsThumbs)
            .aspectRatio(16 / 9)
            .width("100%")
            .borderRadius(6)
            .objectFit(ImageFit.Fill)
            .interpolation(ImageInterpolation.High)

            Image(this.item1.isHot ? $r('app.media.cbn_live_text_comment_hot_done') : $r('app.media.cbn_live_text_comment_hot'))
            .width(16)
            .height(16)
            .objectFit(ImageFit.Fill)
            .interpolation(ImageInterpolation.High)
            .onClick(() => {
                this.clickHot()
            })
        }.padding({ top: 5, bottom: 5 })
    }

    clickHot() {
        if (this.onHotClick) {
            this.onHotClick(this.item1, !this.item1.isHot)
        }
    }
}

更多关于HarmonyOS 鸿蒙Next中列表中的Item刷新无反应的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

当前装饰器修饰的变量,确实只能通过new的方式实例化,不能直接使用后端返回数据。因为构造方法被特殊处理过,所以需要接受后端数据后,需要new出对象,将后端返回数据遍历,塞到new的对象里面

更多关于HarmonyOS 鸿蒙Next中列表中的Item刷新无反应的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,如果列表中的Item刷新无反应,可能是由于以下几个原因导致的:

  1. 数据未更新:确保数据源已经更新,并且更新后的数据已经通知到列表的适配器。如果数据源未更新,列表不会刷新。

  2. 未调用notifyItemChanged:在更新数据后,必须调用适配器的notifyItemChanged方法来通知列表特定Item的更新。如果未调用此方法,列表不会刷新。

  3. UI线程阻塞:确保数据更新和UI刷新操作在主线程中执行。如果UI线程被阻塞,列表刷新操作将无法执行。

  4. Item布局问题:检查Item的布局文件,确保没有设置android:visibility="gone"或其他可能影响Item显示属性的设置。

  5. 适配器问题:检查适配器实现,确保getItemCountonBindViewHolder等方法正确实现,并且适配器能够正确响应数据变化。

  6. 动画干扰:如果启用了Item动画,可能会导致刷新无反应。尝试禁用动画,查看问题是否解决。

  7. 内存问题:如果内存不足,可能会导致UI刷新不及时。检查应用内存使用情况,确保没有内存泄漏或其他内存问题。

  8. 系统问题:鸿蒙系统可能存在某些已知问题或限制,导致列表刷新无反应。检查系统更新日志或相关文档,了解是否有相关修复或限制。

通过这些步骤,可以逐步排查并解决HarmonyOS鸿蒙Next中列表Item刷新无反应的问题。

在HarmonyOS鸿蒙Next中,如果列表中的Item刷新无反应,可能是以下原因导致:

  1. 数据源未更新:确保ListContainerRecyclerView绑定的数据源已正确更新,并调用notifyDataChanged()方法通知UI刷新。

  2. UI线程问题:确保数据更新和UI刷新操作在主线程中执行,避免在子线程中直接更新UI。

  3. Item布局问题:检查Item布局文件,确保布局中的控件ID与代码中绑定的ID一致,且布局更新逻辑正确。

  4. Adapter未正确实现:确认Adapter中的getItemCount()onBindViewHolder()等方法实现无误,确保数据能正确绑定到Item视图。

  5. 缓存问题:如果使用了缓存机制,确保缓存数据已清除或更新,避免显示旧数据。

  6. 生命周期问题:确保在页面生命周期内正确触发数据更新和刷新操作。

建议逐步排查以上问题,确保数据更新逻辑和UI刷新机制正确。

回到顶部