同步代码执行

时间:2018-07-02 07:46:24

标签: java android

我在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功能,我关注this guide。问题是,我设法到达了openPdfFile,这意味着我已经将exportSuccess设置为true,但是,从单击导出按钮的片段中,它始终返回false,因此无法关闭具有webview的片段。 / p>

有什么想法吗?谢谢!

2 个答案:

答案 0 :(得分:0)

在传递片段 ResultFragment上下文的上下文后,您可以使用相同的方法来使用该上下文来关闭对话框,例如context.dismiss();。 您随附的代码段似乎还可以,如果它以同步方式运行,则应该可以正常工作。

答案 1 :(得分:0)

看来,您的方法在PdfView.createWebPrintJob()完成之前就已返回。

您可以在export中传递回调(ResultFragment上下文,WebView webViewResult,ICallback回调);

public interface ICallback{
    void onSuccess();
    void onFailure();
}

分别调用PdfView.createWebPrintJob()中的方法,在回调的实现中,您可以关闭对话框。

Ankit