我正在asynctask
内部SherlockListFragment
开始SherlockFragmentActivity
作为标签在asynctask
内创建。
我将onCreate()
构造函数传递给我的活动上下文并在AsyncTask<String, Integer, String[]> asynctask = new DownloadFilesTask(getSherlockActivity()).execute(url);
内初始化asynctask:
private ProgressDialog dialog;
private SherlockFragmentActivity activity;
public DownloadFilesTask(SherlockFragmentActivity activity) {
this.activity = activity;
this.dialog = new ProgressDialog(activity);
}
AsyncTask类DownloadFilesTask中的构造函数如下所示:
protected void onPreExecute(){
Log.d("AsyncTask!", "Showing dialog now!"); //shown in logcat
dialog.setMessage("Retrieving all currently airing anime. Please wait.");
dialog.setCancelable(false);
dialog.show();
}
预执行和后执行看起来像这样:
protected void onPostExecute(String[] result) {
Log.d("AsyncTask!", "Dismissing dialog now!"); //shown in logcat
dialog.dismiss();
}
{{1}}
但是在完成所有后台工作时,进度对话框不显示! 我在这做错了什么?我认为这可能是一个背景问题。
答案 0 :(得分:4)
由于Mike Repass关于传递一个简单的旧语境的评论,部分问题得到解决。
至于没有显示的对话框...我只是愚蠢,因为我在执行OUTSIDE后阻止了UI线程的AsyncTask后调用.get()
。显然,对话框不会以这种方式出现。
答案 1 :(得分:-1)
在Java中“如果你的方法覆盖了它的一个超类方法,你可以通过使用关键字 super 来调用被覆盖的方法。”因此,在启动进度对话框时,请更改onPreExecute()方法:
@Override
protected void onPreExecute(){
super.onPreExecute();
dialog = new ProgressDialog(activity);
Log.d("AsyncTask!", "Showing dialog now!"); //shown in logcat
dialog.setMessage("Retreiving all currently airing anime. Please wait.");
dialog.setCancelable(false);
dialog.show();
}