代码之家  ›  专栏  ›  技术社区  ›  user846316

立即打开对话框,然后加载对话框的内容

  •  0
  • user846316  · 技术社区  · 6 年前

    脚本: 在我的应用程序中,当我单击按钮时,它会打开WebView对话框,加载一些数据(包括本地复制、编辑和加载HTML文件)。WebView应显示本地创建的HTML文件。

    发生了什么事: 打开对话框需要很长时间。它至少等待文件复制和编辑部分。当WebView开始加载HTML文件时,将打开该对话框。

    我所尝试的: 我试着在主线程中调用这些:

    url = prepareLocalHtmlFile(dataKey); //Copy and edit html file and returns its path in local dir
    webView.loadUrl(url); //Show the html file in WebView
    

    也在单独的线程中尝试:

    Thread mThread = new Thread() {
        @Override
        public void run() {
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    url = prepareLocalHtmlFile(dataKey); //Copy and edit html file and returns its path in local dir
                    webView.loadUrl(url); //Show the html file in WebView
                }
            });
        }
    };
    mThread.start();
    

    我想要什么: 只要我按下按钮,对话框就会立即打开,然后所有耗时的操作都会发生(在WebView中复制、编辑和加载HTML)。请建议如何实现。

    1 回复  |  直到 6 年前
        1
  •  0
  •   user846316    6 年前

    经过一番尝试,我终于找到了解决办法。使用 AsyncTask .

    我创建了一个扩展 异步任务 .

    public class GenerateDataToDisplay extends AsyncTask<String, Integer, Boolean> {
        private Context context;
        private SQLiteDatabase appDb;
    
        public GenerateDataToDisplay(Context context, SQLiteDatabase appDb){
            this.context = context;
            this.appDb = appDb;
        }
    
        @Override
        protected Boolean doInBackground(String[] results) {
            return results.length > 0 && generateDataToDisplay(context, appDb, results[0]);
        }
    }
    

    然后执行这个 异步任务 在调用对话框中,如下所示:

    new GenerateDataToDisplay(this, db)
            {
                @Override
                public void onPostExecute(Boolean result) {
                    //Hide progress bar
                    progressBar.setVisibility(View.GONE);
                    //Display data
                    textView.setText("Got it!!!"); 
                }
            }.execute(inputKey);
    

    通过这个实现,对话框立即打开,进度条显示,数据加载开始。( 异步任务 )当数据准备就绪时,进度条将消失并显示数据。

    到目前为止对我来说还可以。如果您有更好的建议,请随时发表评论,添加另一个答案。

    推荐文章