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