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

3 回复

也遇到,感觉是save会默认拉起一个透明弹窗,不可见。如果这个透明弹框没有及时销毁,立即调用toast,会展示不出。希望官方出来回答一下。

更多关于HarmonyOS 鸿蒙Next: HarmonyOS 应用中 DocumentPicker 保存操作后 promptAction.openCustomDialog 弹窗无法正常显示的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


朋友们,虽然不理解 。但是我翻了翻官方的例子 。打开弹窗的方法加个定时器就可以了…

setTimeout(() => {

}, 200)

在HarmonyOS Next中,使用DocumentPicker保存文件后,promptAction.openCustomDialog弹窗无法正常显示,可能是由于以下原因:

  1. 生命周期管理DocumentPicker保存操作可能影响了当前页面的生命周期,导致弹窗无法正确触发。确保在保存操作完成后,页面状态未发生变化。

  2. 线程阻塞:保存操作可能阻塞了UI线程,导致弹窗无法及时渲染。可以尝试将保存操作放在异步任务中执行,确保UI线程不被阻塞。

  3. 权限问题DocumentPicker保存操作可能涉及文件系统权限,若权限未正确获取或处理,可能影响后续弹窗的显示。检查并确保相关权限已正确申请和处理。

  4. 事件冲突:保存操作可能触发了某些事件,与promptAction.openCustomDialog的事件处理产生冲突。检查事件监听和处理逻辑,确保无冲突。

  5. API调用顺序DocumentPicker保存操作与promptAction.openCustomDialog的调用顺序可能存在问题。确保在保存操作完成后再调用弹窗显示逻辑。

  6. 系统资源限制:保存操作可能消耗了较多系统资源,导致弹窗无法正常显示。检查系统资源使用情况,优化资源管理。

  7. 鸿蒙Next版本兼容性:可能是鸿蒙Next版本的某些特性或Bug导致的问题。检查官方文档或更新日志,确认是否存在已知问题。

  8. 弹窗配置:检查promptAction.openCustomDialog的配置参数,确保所有必填项已正确设置,特别是与上下文相关的参数。

总结:DocumentPicker保存操作后promptAction.openCustomDialog弹窗无法正常显示,可能涉及生命周期管理、线程阻塞、权限问题、事件冲突、API调用顺序、系统资源限制、版本兼容性或弹窗配置等方面。逐一排查这些问题,可能有助于解决问题。

回到顶部