HarmonyOS 鸿蒙Next IDataSource的使用
HarmonyOS 鸿蒙Next IDataSource的使用
demo中,当删除第0的元素的后,再次点击第一个item数据错乱。
import { BasicDataSource } from './BasicDataSource'
import { showToast } from './Toast'
@Entry
@Component
struct LazyForEachPage {
dataSource: BasicDataSource<IModel> = new BasicDataSource()
uuids: string[] = [
"你好哇",
"李银河",
"解放军",
"三大件",
"世界很美好"
]
addData(len: number, tips: string) {
for (let index = 0; index < len; index++) {
let model: IModel = {
title: tips,
subTitle: this.uuids[index],
creatTime: generateUnixTimestamp().toString()
}
this.dataSource.pushData(model)
}
}
onPageShow(): void {
this.addData(5, "添加原始数据")
}
build() {
Column() {
Text("先删除第0个元素,在点击第0个,数据错乱")
Row({ space: 8 }) {
Text("数据总量")
.fontSize(20)
.onClick(() =>{
showToast(`总量:${this.dataSource.totalCount()}`)
})
Text("删除第0个数据")
.backgroundColor(Color.Red)
.fontSize(20)
.onClick(() =>{
this.dataSource.deleteData(0)
})
}
List({ space: 8 }) {
LazyForEach(this.dataSource, (item: IModel, index: number) {
ListItem() {
this.createItem(item, index)
}
.padding(8)
.width("100%")
.onClick(() => {
showToast(` 当前索引:${this.dataSource.getData(index).subTitle}`,5)
})
}, (item: IModel) => {
return JSON.stringify(item)
})
}
}
.height('100%')
.width('100%')
.margin({ top: 20 })
}
@Builder
createItem(item: IModel, index: number) {
Column({ space: 8 }) {
Text(item.title)
.fontSize(20)
Text(item.subTitle + item.creatTime)
.fontSize(17)
}
.width("100%")
.padding(8)
.borderRadius(8)
.backgroundColor(index % 2 === 0 ? Color.Red : Color.Orange)
}
}
interface IModel {
title: string,
subTitle?: string,
creatTime: string
}
/*
* unix时间戳
*
*/
export function generateUnixTimestamp(): number {
let tamp = Math.floor(new Date().getTime());
return tamp
}
更多关于HarmonyOS 鸿蒙Next IDataSource的使用的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
2 回复
LazyForEachPage.ets
import { BasicDataSource } from './BasicDataSource'
import { showToast } from './Toast'
@Entry
@Component
struct LazyForEachPage {
dataSource: BasicDataSource<IModel> = new BasicDataSource()
uuids: string[] = [
"你好哇",
"李银河",
"解放军",
"三大件",
"世界很美好"
]
addData(len: number, tips: string) {
for (let index = 0; index < len; index++) {
let model: IModel = {
title: tips,
subTitle: this.uuids[index],
creatTime: generateUnixTimestamp().toString()
}
this.dataSource.pushData(model)
}
}
onPageShow(): void {
this.addData(5, "添加原始数据")
}
build() {
Column() {
Text("先删除第0个元素,在点击第0个,数据错乱")
Row({ space: 8 }) {
Text("数据总量")
.fontSize(20)
.onClick(() =>{
showToast(`总量:${this.dataSource.totalCount()}`)
})
Text("删除第0个数据")
.backgroundColor(Color.Red)
.fontSize(20)
.onClick(() =>{
this.dataSource.deleteData(0)
})
}
List({ space: 8 }) {
LazyForEach(this.dataSource, (item: IModel, index: number) => {
ListItem() {
createItem({item:item,index:index})
}
.padding(8)
.width("100%")
}, (item: IModel) => {
return JSON.stringify(item)
})
}
}
.height('100%')
.width('100%')
.margin({ top: 20 })
}
}
@Component
struct createItem {
@State item:IModel = {
title: '',
subTitle: '',
creatTime: ''
}
@State index:number = 0
build() {
Column({ space: 8 }) {
Text(this.item.title+this.index.toString())
.fontSize(20)
Text(this.item.subTitle + this.item.creatTime)
.fontSize(17)
}
.width("100%")
.padding(8)
.borderRadius(8)
.backgroundColor(this.index % 2 === 0 ? Color.Red : Color.Orange)
.onClick(() =>{
showToast(` 当前索引:${this.item.subTitle}`+this.index.toString(),5)
})
}
}
interface IModel {
title: string,
subTitle?: string,
creatTime: string
}
/*
* unix时间戳
*
*/
export function generateUnixTimestamp(): number {
let tamp = Math.floor(new Date().getTime());
return tamp
}
更多关于HarmonyOS 鸿蒙Next IDataSource的使用的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
使用IDataSource的步骤大致如下:
-
定义数据源:根据应用需求,定义合适的数据源类型,并实现IDataSource接口。这包括实现数据获取、数据更新等核心方法。
-
注册数据源:在数据能力的配置文件中,注册定义好的数据源。这样,当其他组件或应用需要访问这些数据时,就可以通过数据能力来获取。
-
访问数据源:通过数据能力的URI,应用可以访问到注册的数据源。开发者可以使用系统提供的API,通过URI来读取、写入或更新数据源中的数据。
需要注意的是,IDataSource的使用可能涉及到数据的安全性和隐私保护,因此在实现和访问数据源时,需要遵循相关的安全规范。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html,