我有一个用文章填充的 ListView
。当用户长按一篇文章时,我想下载它的摘要并显示给用户。我在 AsyncTask
(不是 doInBackground
...)中有一个函数负责下载。在下载过程中,我想显示一个ProgressDialog
。由于下载是在主线程上进行的,所以当我长按一篇文章时会出现延迟,并且 ProgressDialog
在下载完成后显示。如何让它在下载过程中显示?
我已经尝试过这些方法,但由于我是 Android 开发的初学者,所以我不太了解它们。该应用程序在下载时卡住并在完成后显示对话框。
ProgressDialog shows up after thread is done display progressdialog while listview is loading
主页 Activity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
trendingList.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
try {
...
} catch (Exception e) {
String link = homeLinks.get(position);
//TASK TO DOWNLOAD SUMMARIES FROM ASYNCTASK
task.downloadSummary(link);
adapter.notifyDataSetChanged();
}
return true;
}
});
背景类
public class BackgroundTask extends AsyncTask<String, Void, String> {
ProgressDialog progress = new ProgressDialog(HomeActivity.this);
//SHOW DIALOG AND THEN DOWNLOAD SUMMARIES
public void downloadSummary(String address){
progress.setMessage("Downloaded summary ");
progress.show();
...
最佳答案
在初始化 AsyncTask 时,您必须分配该线程的 3 个相关方法,onPreExecute 将分配您的 ProgressDialog,InBackground 用于放置您要执行的作业,onPostExecute 用于重新生成您的工作结果并关闭您的 progressDialog
一直这样
public class BackgroundTask extends AsyncTask<String, Void, String> {
ProgressDialog progress = new ProgressDialog(HomeActivity.this);
@Override
protected void onPreExecute() {
super.onPreExecute();
progress.setMessage("Downloaded summary ");
progress.show();
}
@Override
protected void doInBackground(String... strings) {
//Ação do Trabalho
}
@Override
protected void onPostExecute(String result) {
progress.dismiss();
Log.e("Work", "Result "+result);
}
}
这是强制性的,谷歌后台方法不喜欢忽略此用途,因为 AsysnTask 将不得不使用它。相反,如果它是一项快速的工作,则使用通过运行调用的线程
关于android - 修复下载完成后出现的 ProgressDialog,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54312984/