首页 > 解决方案 > 同步代码执行

问题描述

我在 Android Java 中执行函数时遇到了一些问题。我有一个带有 webview 的片段,单击按钮后,我将在视图模型中执行导出到 pdf 功能。如果成功,那么我继续使用 webview 关闭片段。

这是我调用导出到 pdf 函数的代码:

@Click(R.id.buttonExport)
void buttonExportClicked(View v){
    SummaryViewModel summaryViewModel = ViewModelProviders.of(this).get(SummaryViewModel.class);
    boolean exportSuccess = summaryViewModel.export(ResultFragment.this, webViewResult);

    if(exportSuccess == true) dismiss();
}

在我的视图模型中:

private boolean exportSuccess;
public boolean export(ResultFragment context, WebView webViewResult) {
    File directory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS + "/PDFTest/");
    String fileName = "Summary.pdf";

    PdfView.createWebPrintJob(context.getActivity(), webViewResult, directory, fileName, new PdfView.Callback() {
        @Override
        public void success(String path) {
            PdfView.openPdfFile(context.getActivity(), context.getString(R.string.app_name), "Do you want to open the " + fileName + " file?", path);
            exportSuccess = true;
        }

        @Override
        public void failure() {
            exportSuccess = false;
        }
    });
    return exportSuccess;
}

对于导出到 pdf 功能,我正在遵循本指南。问题是,我设法到达了 openPdfFile,这意味着我已经将 exportSuccess 设置为 true,但是,从单击导出按钮的片段中,它始终返回 false,因此无法关闭带有 webview 的片段。

有任何想法吗?谢谢!

标签: javaandroid

解决方案


由于您已经传递了片段ResultFragment 上下文的上下文,因此您可以在相同的方法中使用上下文来关闭对话框,例如context.dismiss();. 您附加的代码段似乎没问题,如果它以同步方式运行,它应该可以工作。


推荐阅读