HarmonyOS 鸿蒙Next:如何让dialog在隐藏后重新展示时数据不消失
HarmonyOS 鸿蒙Next:如何让dialog在隐藏后重新展示时数据不消失 如何让dialog在隐藏的情况下,在展示时,数据不消失
看以下demo是否能满足要求:
// xxx.ets
@CustomDialog
@Component
struct CustomDialogExample {
@Link textValue: string
@Link inputValue: string
controller?: CustomDialogController
cancel: () => void = () => {
}
confirm: () => void = () => {
}
build() {
Column() {
Text('Change text').fontSize(20).margin({ top: 10, bottom: 10 })
TextInput({ placeholder: '', text: this.textValue }).height(60).width('90%')
.onChange((value: string) => {
this.textValue = value
})
Text('Whether to change a text?').fontSize(16).margin({ bottom: 10 })
Flex({ justifyContent: FlexAlign.SpaceAround }) {
Button('cancel')
.onClick(() => {
if (this.controller != undefined) {
this.controller.close()
this.cancel()
}
}).backgroundColor(0xffffff).fontColor(Color.Black)
Button('confirm')
.onClick(() => {
if (this.controller != undefined) {
this.inputValue = this.textValue
this.controller.close()
this.confirm()
}
})
.backgroundColor(0xffffff)
.fontColor(Color.Red)
}
.margin({ bottom: 10 })
}
.borderRadius(10)
}
}
@Entry
@Component
struct CustomDialogUser {
@State textValue: string = ''
@State inputValue: string = 'click me'
dialogController: CustomDialogController | null = new CustomDialogController({
builder: CustomDialogExample({
cancel: () => { this.onCancel() },
confirm: () => { this.onAccept() },
textValue: $textValue,
inputValue: $inputValue
}),
cancel: this.exitApp,
autoCancel: true,
onWillDismiss: (dismissDialogAction: DismissDialogAction) => {
console.info("reason=" + JSON.stringify(dismissDialogAction.reason))
console.log("dialog onWillDismiss")
if (dismissDialogAction.reason == DismissReason.PRESS_BACK) {
dismissDialogAction.dismiss()
}
if (dismissDialogAction.reason == DismissReason.TOUCH_OUTSIDE) {
dismissDialogAction.dismiss()
}
},
alignment: DialogAlignment.Bottom,
offset: { dx: 0, dy: -20 },
gridCount: 4,
customStyle: false,
cornerRadius: 10,
})
// 在自定义组件即将析构销毁时将dialogController置空
aboutToDisappear() {
this.dialogController = null // 将dialogController置空
}
onCancel() {
console.info('Callback when the first button is clicked')
}
onAccept() {
console.info('Callback when the second button is clicked')
}
exitApp() {
console.info('Click the callback in the blank area')
}
build() {
Column() {
Button(this.inputValue)
.onClick(() => {
if (this.dialogController != null) {
this.dialogController.open()
}
}).backgroundColor(0x317aff)
}.width('100%').margin({ top: 5 })
}
}
更多关于HarmonyOS 鸿蒙Next:如何让dialog在隐藏后重新展示时数据不消失的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
数据持久化保存
在HarmonyOS鸿蒙系统中,若想让Dialog在隐藏后重新展示时数据不消失,可以采取以下策略:
-
保存Dialog状态:在Dialog隐藏前,将Dialog中显示的数据(如文本、选择项等)保存到某个全局变量或数据结构中。当Dialog重新展示时,从这些保存的数据中恢复Dialog的状态。
-
使用自定义Dialog:如果标准Dialog组件无法满足需求,可以创建一个自定义Dialog,通过继承Dialog类或在Dialog的布局文件中定义自定义视图来实现。在自定义Dialog中,可以更好地控制数据的保存和恢复逻辑。
-
利用Fragment替代Dialog:在某些情况下,可以考虑使用Fragment来替代Dialog。Fragment具有更强大的生命周期管理功能,可以更容易地保存和恢复状态。当需要显示Dialog时,将Fragment添加到Activity中;当需要隐藏Dialog时,将Fragment从Activity中移除,但保留其状态。
-
确保数据持久化:如果Dialog中的数据非常重要,可以考虑将数据持久化到存储介质(如文件、数据库等)。这样,即使应用被关闭或重启,数据也能被恢复。
请注意,以上策略需要根据具体的应用场景和需求来选择和实现。如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html