私は、ListActivityを使ってインターネットからダウンロードした画像だけでなく、TextViewや評価バーを表示するアプリケーションを作っています。 これを管理するAsyncTaskを追加しました。私のsetListAdapterをonPostExecute()の部分に追加しました。しかし、設定が完了している間にプログレスバー(またはプログレス・ダイアグラム)を表示したかったのです。ListActivityブロックapp内のアイテムの読み込み
バーは私のエミュレータではしばらく表示されますが、デバイス上で私のアプリを試しても、エミュレータ内でさえも、setListAdapterが動作しているときにバーがフリーズします...ただ、私のArrayAdapterにpublishProgressを追加する方法は、もう一つのクラスだから分かりません。 ああ、私はListActivityのレイアウトを設定しました。それはprogressBarを配置する場所ですが、私が推測するデバイスはdoInBackgroundを非常に高速にしてレイアウトが表示されないようにします。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
extras = getIntent().getExtras();
platinumCinema = false;
setContentView(R.layout.simple_list_item_1);
Log.i(TAG,"Control B");
MoviesAsyncTask movieTask = new MoviesAsyncTask();
movieTask.execute();
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.window_title_billboard);
}
@Override
protected void onPreExecute() {
super.onPreExecute();
mProgress = (ProgressBar)findViewById(R.id.progressbar_Horizontal);
mProgress.setVisibility(View.VISIBLE);
Log.i(TAG, "PreExecute");
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
if(result.equals("ok"))
Log.i(TAG,"Ended succesfully");
//ProgressDialog mDialog = ProgressDialog.show(BillboardMovieList.this, "","Loading. Please wait...", true);
publishProgress(75);
if(searchMethod.equals("byCinema")){
setListAdapter(new ArrayAdapterSchemaCinemas(BillboardMovieList.this, listMovies,listPosters, listRating, listTimes));
}else
...
これまで問題が発生していたのは、listAdapterを設定するときです。これは、リスト自体を生成するためにUIスレッドをブロックする(間違っていなければ)タスクです。これはonPostExecuteで行う必要があります。なぜならdoInBackgroundはこれを処理できないのですか? –
@Paulina D: 'doInBackground()'でアダプタを作成できますが、 'setListAdapter()'を 'onPostExecute()'まで呼び出すことはできません。 – CommonsWare
どうすればアダプタを作成できますか?リストビューのドキュメントでは、onCreateAdapterなどは表示されません。=( –