HarmonyOS 鸿蒙Next: HarmonyOS 应用中 DocumentPicker 保存操作后 promptAction.openCustomDialog 弹窗无法正常显示
HarmonyOS 鸿蒙Next: HarmonyOS 应用中 DocumentPicker 保存操作后 promptAction.openCustomDialog 弹窗无法正常显示 想实现的效果是:通过按钮触发调用 DocumentPicker 打开文件选择器,以 Save 模式完成文件保存操作后,使用 promptAction.openCustomDialog() API 展示自定义弹窗进行结果提示。
当前遇到的问题是:虽然代码执行到 openCustomDialog() 方法(即方法被正常调用),但界面上未能看到预期的弹窗显示。
求助问题出在哪里啊?单独执行 promptAction.openCustomDialog() 是可以正常打开弹窗的。
Button($r('app.string.Export'))
.buttonStyle(ButtonStyleMode.TEXTUAL)
.margin({left:20})
.onClick(() => {
console.log('ButtonType.Normal')
try {
let documentSaveOptions = new picker.DocumentSaveOptions();
documentSaveOptions.newFileNames = ['DocumentViewPicker01.txt'];
let documentPicker = new picker.DocumentViewPicker(getContext(this));
documentPicker.save(documentSaveOptions).then((documentSaveResult: Array<string>) => {
let uiContext = this.getUIContext();
let promptAction = uiContext.getPromptAction();
let contentNode = new ComponentContent(uiContext, wrapBuilder(buildText), new Params("这是一个弹框"));
try {
promptAction.openCustomDialog(contentNode);
} catch (error) {
let message = (error as BusinessError).message;
let code = (error as BusinessError).code;
console.error(`OpenCustomDialog args error code is ${code}, message is ${message}`);
}
console.info('DocumentViewPicker.save successfully, documentSaveResult uri: ' + JSON.stringify(documentSaveResult));
}).catch((err: BusinessError) => {
console.error('DocumentViewPicker.save failed with err: ' + JSON.stringify(err));
});
} catch (error) {
let err: BusinessError = error as BusinessError;
console.error('DocumentViewPicker failed with err: ' + JSON.stringify(err));
}
})
export class Params {
text: string = ""
constructor(text: string) {
this.text = text;
}
}
@Builder
export function buildText(params: Params) {
Column() {
Text(params.text)
.fontSize(50)
.fontWeight(FontWeight.Bold)
.margin({ bottom: 36 })
}.backgroundColor('#FFF0F0F0').width('100%')
}
更多关于HarmonyOS 鸿蒙Next: HarmonyOS 应用中 DocumentPicker 保存操作后 promptAction.openCustomDialog 弹窗无法正常显示的实战教程也可以访问 https://www.itying.com/category-93-b0.html
也遇到,感觉是save会默认拉起一个透明弹窗,不可见。如果这个透明弹框没有及时销毁,立即调用toast,会展示不出。希望官方出来回答一下。
更多关于HarmonyOS 鸿蒙Next: HarmonyOS 应用中 DocumentPicker 保存操作后 promptAction.openCustomDialog 弹窗无法正常显示的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
朋友们,虽然不理解 。但是我翻了翻官方的例子 。打开弹窗的方法加个定时器就可以了…
setTimeout(() => {
}, 200)
在HarmonyOS Next中,使用DocumentPicker
保存文件后,promptAction.openCustomDialog
弹窗无法正常显示,可能是由于以下原因:
-
生命周期管理:
DocumentPicker
保存操作可能影响了当前页面的生命周期,导致弹窗无法正确触发。确保在保存操作完成后,页面状态未发生变化。 -
线程阻塞:保存操作可能阻塞了UI线程,导致弹窗无法及时渲染。可以尝试将保存操作放在异步任务中执行,确保UI线程不被阻塞。
-
权限问题:
DocumentPicker
保存操作可能涉及文件系统权限,若权限未正确获取或处理,可能影响后续弹窗的显示。检查并确保相关权限已正确申请和处理。 -
事件冲突:保存操作可能触发了某些事件,与
promptAction.openCustomDialog
的事件处理产生冲突。检查事件监听和处理逻辑,确保无冲突。 -
API调用顺序:
DocumentPicker
保存操作与promptAction.openCustomDialog
的调用顺序可能存在问题。确保在保存操作完成后再调用弹窗显示逻辑。 -
系统资源限制:保存操作可能消耗了较多系统资源,导致弹窗无法正常显示。检查系统资源使用情况,优化资源管理。
-
鸿蒙Next版本兼容性:可能是鸿蒙Next版本的某些特性或Bug导致的问题。检查官方文档或更新日志,确认是否存在已知问题。
-
弹窗配置:检查
promptAction.openCustomDialog
的配置参数,确保所有必填项已正确设置,特别是与上下文相关的参数。
总结:DocumentPicker
保存操作后promptAction.openCustomDialog
弹窗无法正常显示,可能涉及生命周期管理、线程阻塞、权限问题、事件冲突、API调用顺序、系统资源限制、版本兼容性或弹窗配置等方面。逐一排查这些问题,可能有助于解决问题。