2013-02-26 59 views
2

我开始SherlockListFragment内的asynctask,它是在SherlockFragmentActivity内作为选项卡创建的。Android:AsyncTask中的进度对话框没有显示

我通过asynctask构造我的活动内容和初始化像这样的AsyncTask里面onCreate()

AsyncTask<String, Integer, String[]> asynctask = new DownloadFilesTask(getSherlockActivity()).execute(url); 

中的AsyncTask类DownloadFilesTask内部的构造是这样的:

private ProgressDialog dialog; 
private SherlockFragmentActivity activity; 

public DownloadFilesTask(SherlockFragmentActivity activity) { 
     this.activity = activity; 
     this.dialog = new ProgressDialog(activity); 
    } 

预执行和后执行看起来像这样:

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(); 
} 

但是在进行所有后台工作时并没有显示进度对话框! 我在这里做错了什么?我认为这可能是一个背景问题。

+0

您应该将代码发布到您如何(以及何时)执行AsyncTask。注意:您需要实例化它并在UI线程上调用execute(根据http://developer.android.com/reference/android/os/AsyncTask.html) – 2013-02-26 23:19:29

+0

我在类的onCreate中创建AsyncTask实例这扩展了SherlockListFragment。我如何在UI线程上调用它? – 2013-02-27 06:20:36

+1

只是为了实验的目的,放弃SherlockFragmentActivity方面,直接传入一个好的“Context”。用新的DownloadFilesTask(this)调用你的构造函数,然后执行(url)并看看会发生什么。 – 2013-02-27 07:56:49

回答

4

部分固定得益于麦克再经过大约经过一个普通的老上下文的评论。

至于没有出现的对话...我只是很愚蠢,因为我在执行OUTSIDE之后调用.get()阻止UI线程的AsyncTask。显然,对话不会以这种方式显示出来。

-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(); 
} 
+3

这是来自[AsyncTask源代码](https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/java/android/os/AsyncTask.java):'protected void onPreExecute(){ }'。给超级打电话不会有太大的帮助。 – 2013-02-26 23:13:02