2

aの中にタブとして作成されたasynctaskaの内側から始めています。SherlockListFragmentSherlockFragmentActivity

コンストラクターにアクティビティコンテキストを渡し、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();
}

ただし、すべてのバックグラウンド作業が行われている間は、進行状況ダイアログは表示されません。私はここで何が間違っているのですか?文脈上の問​​題かもしれないと思います。

4

2 に答える 2

5

問題の一部は、普通の古いコンテキストを渡すことについての Mike Repass からのコメントのおかげで修正されました。

.get()ダイアログが表示されないのは... UIスレッドをブロックするAsyncTaskの実行後に呼び出したので、私はただ愚かでした。明らかに、ダイアログはそのようには表示されません。

于 2013-02-27T19:30:50.313 に答える
-1

Java では、「メソッドがそのスーパークラスのメソッドの 1 つをオーバーライドする場合、キーワード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();  
}
于 2013-02-26T23:10:46.963 に答える