HarmonyOS 鸿蒙Next List刷新问题
HarmonyOS 鸿蒙Next List刷新问题
修改数据源其中一个item的某一个属性 如何刷新数据,有大佬遇到过吗?
我在修改数据之后 用list[index] = item,list是数据源,index是修改的第几个,item是第index个的item,但是不管用, 有遇到这种问题的嘛???
监测对象数组中对象的属性得用@Observed装饰器和@ObjectLink装饰器
更多关于HarmonyOS 鸿蒙Next List刷新问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
楼主,我也遇到了你说的这个问题,能帮我看下我的代码吗?要怎么使用这个[@Watch](/user/Watch)呢。
/** * 通过父节点获取的子节点数据集合 */ [@Prop](/user/Prop) [@Watch](/user/Watch)("ddd") nodeList: NodePersonEntity[] = []
ddd(propName: string) { this.build() }
build() { Column() { Row() { Checkbox({ name: “check_select_all” }) .shape(CheckBoxShape.CIRCLE) .onChange((value: boolean) => { console.info(‘Checkbox1 change is’ + value) }) Text($r(‘app.string.select_all’)).margin({ left: 12 }) }.padding({ left: 8, right: 8 }).alignSelf(ItemAlign.Start)
List() { ForEach(<span class="hljs-keyword"><span class="hljs-keyword">this</span></span>.nodeList, (item: NodePersonEntity, index: number) => { ListItem() { RelativeContainer() { Row() { Checkbox().shape(CheckBoxShape.CIRCLE).onChange((value: boolean) => { }).select(item.isSelected) Text(item.name.length > <span class="hljs-number"><span class="hljs-number">2</span></span> ? item.name.substring(<span class="hljs-number"><span class="hljs-number">0</span></span>, <span class="hljs-number"><span class="hljs-number">2</span></span>) : item.name) .width(<span class="hljs-number"><span class="hljs-number">50</span></span>) .height(<span class="hljs-number"><span class="hljs-number">50</span></span>) .backgroundColor(<span class="hljs-string"><span class="hljs-string">'#ff4879e8'</span></span>) .fontColor(Color.White) .padding(<span class="hljs-number"><span class="hljs-number">12</span></span>) .borderRadius(<span class="hljs-number"><span class="hljs-number">100</span></span>) .fontSize(<span class="hljs-number"><span class="hljs-number">13</span></span>) .textAlign(TextAlign.Center) .margin({ left: <span class="hljs-number"><span class="hljs-number">12</span></span> }) Text(item.name).margin({ left: <span class="hljs-number"><span class="hljs-number">12</span></span> }) } .alignItems(VerticalAlign.Center) .alignRules({ center: { anchor: <span class="hljs-string"><span class="hljs-string">"__container__"</span></span>, align: VerticalAlign.Center } }) Row() { Image($r(<span class="hljs-string"><span class="hljs-string">'app.media.icon_arrow_right'</span></span>)) .width(<span class="hljs-number"><span class="hljs-number">32</span></span>) .height(<span class="hljs-number"><span class="hljs-number">32</span></span>) .objectFit(ImageFit.Contain) .padding(<span class="hljs-number"><span class="hljs-number">4</span></span>) Image($r(<span class="hljs-string"><span class="hljs-string">'app.media.icon_tongxunlu_nextnode'</span></span>)).width(<span class="hljs-number"><span class="hljs-number">32</span></span>).height(<span class="hljs-number"><span class="hljs-number">32</span></span>).objectFit(ImageFit.Contain) Text($r(<span class="hljs-string"><span class="hljs-string">'app.string.text_next_node'</span></span>)) } .visibility(item.id.endsWith(<span class="hljs-string"><span class="hljs-string">"u"</span></span>) ? Visibility.None : Visibility.Visible) .alignItems(VerticalAlign.Center) .alignRules({ right: { anchor: <span class="hljs-string"><span class="hljs-string">"__container__"</span></span>, align: HorizontalAlign.End }, center: { anchor: <span class="hljs-string"><span class="hljs-string">"__container__"</span></span>, align: VerticalAlign.Center } }) .padding({ left: <span class="hljs-number"><span class="hljs-number">8</span></span>, right: <span class="hljs-number"><span class="hljs-number">8</span></span> }) .onClick(() => { <span class="hljs-keyword"><span class="hljs-keyword">this</span></span>.context.eventHub.emit(EventHubConstant.SELECT_NODE_PERSON_NEXT_NODE, item) }) }.width(<span class="hljs-string"><span class="hljs-string">'100%'</span></span>).height(<span class="hljs-number"><span class="hljs-number">60</span></span>).onClick(() => { item.isSelected = <span class="hljs-literal"><span class="hljs-literal">true</span></span> <span class="hljs-keyword"><span class="hljs-keyword">this</span></span>.nodeList[index] = item }) }.padding({ left: <span class="hljs-number"><span class="hljs-number">8</span></span>, right: <span class="hljs-number"><span class="hljs-number">8</span></span> }) }) }.margin({ top: <span class="hljs-number"><span class="hljs-number">12</span></span> }) }.padding({ top: <span class="hljs-number"><span class="hljs-number">8</span></span>, bottom: <span class="hljs-number"><span class="hljs-number">8</span></span> })
}
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>
我在下面的onClick事件中修改了item的isSelected属性,然后想刷新整个列表显示。
或许可以:
List For循环的数据keyGenerator确认相同数据的.
每次更新item后,将对应item的keyGenerator返回值进行修改, 比如以item中id+updateTime为返回值.
嗯 感谢
HarmonyOS 鸿蒙系统中遇到Next List(假设是某个特定组件或列表视图的引用)刷新问题,通常与数据更新未正确触发UI重绘有关。请检查以下几点:
- 确保数据源已正确更新。
- 使用合适的刷新机制,如
notifyDataSetChanged()
(如果是Adapter)或状态管理(如LiveData, ViewModel等)来触发UI更新。 - 检查是否在UI线程中更新UI,避免多线程问题。
- 查看是否有缓存或旧数据干扰了新数据的显示。
如果问题依旧没法解决请加我微信,我的微信是itying888。
更多关于HarmonyOS 鸿蒙Next List刷新问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html