我有一个用文章填充的ListView。当用户长时间单击文章时,我想下载其摘要并将其显示给用户。我在AsyncTask(NOT doInBackground ...)中有一个函数负责下载。在下载过程中,我想显示一个ProgressDialog。由于下载是在主线程上进行的,因此当我长按一下文章时会有一个延迟,并且在下载完成后ProgressDialog将显示。在下载过程中如何显示?
我尝试了这些方法,但是由于我是Android开发的初学者,所以我不太了解。该应用程序在下载时冻结,并在完成后显示对话框。
ProgressDialog shows up after thread is done display progressdialog while listview is loading
HomeActivity
@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();
...
谢谢。
答案 0 :(得分:0)
初始化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不得不使用时,google后台方法不喜欢这种用法。相反,如果这是一项快速工作,请使用以run调用的线程