android - 立即打开对话框,然后为对话框加载内容
问题描述
场景:在我的应用程序中,当我单击按钮时,它会打开带有 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)。请建议如何实现它。
解决方案
在尝试了更多之后,我终于找到了解决方案。使用AsyncTask
.
我创建了一个扩展类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]);
}
}
然后AsyncTask
在调用对话框中执行此操作,如下所示:
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);
通过这个实现,对话框立即打开,进度条显示,数据加载开始 ( AsyncTask
)。当数据准备好时,进度条消失并显示数据。
到目前为止,它对我来说效果很好。如果您有更好的建议,请随时发表评论以添加另一个答案。
推荐阅读
- keras - 数据库的大小是否会影响模型的预测速度
- google-cloud-datastore - 关于克服谷歌数据存储每秒更新一次/实体限制的模式
- multithreading - 仅使用 1 个信号量的生产者消费者同步
- ajax - 如何在 laravel 中使用 ajax 在数据库中插入数据?
- android - Android 文本滚动不适用于 Scrollview 和 Textview
- vba - GoTo 上的语法错误“On Error GoTo [label]”行
- apache-spark - 谁执行pyspark中的python代码
- php - AWS - Cognito - AdminSetUserPassword 返回“找不到操作:AdminSetUserPassword”
- json - 将 JSON 解压缩为平面格式
- linux - 如何使用 parted 编写自动任务脚本(更新 gpt 表)