Handlersをパラメータとして受け取り、doBackgroundでHandlersendEmptyMessage(0)を送信する単純なAsyncTaskクラスを開発しましたが、ProgressDialoge読み込みビューをロードしますが、何らかの理由で、私のHandlerオブジェクトの中にあるものを実行します(つまり、最後にprogressDialogueが点滅します)。ここ Androidの進行ダイアログがビューに表示されない
は私のAsyncTaskです:package com.kc.util;
import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Handler;
import android.util.Log;
public class LoadDialoge extends AsyncTask<Handler, Integer, Void> {
private ProgressDialog progressDialog;
private String TAG = "LoadDialoge";
private Context mContext;
@Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
progressDialog.dismiss();
}
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
showWait();
}
@Override
protected Void doInBackground(Handler... params) {
// TODO Auto-generated method stub
for(Handler mHandler : params){
mHandler.sendEmptyMessage(0);
Log.d(TAG, "handler sending message");
}
return null;
}
private void showWait() {
Log.d(TAG, "showWait");
progressDialog = new ProgressDialog(mContext);
progressDialog.setTitle("Retrieving contact details");
progressDialog.setMessage("Please wait...");
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.show();
Log.d(TAG, " ");
}
public void setmContext(Context mContext) {
this.mContext = mContext;
}
}
そして、ここで私はActivityからこのクラスに渡されたハンドラである:
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
Log.d(TAG, "handleMessage");
initialiseOnItemClickListeners();
initialiseOnClickListeners();
initialiseListViewAdapters();
loadDataToDb();
initializeTitles();
initialize();
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.abstract_main_menu);
LoadDialoge load = new LoadDialoge();
load.setmContext(this);
load.execute(mHandler);
}
イム任意の間で動作する汎用的な非同期ロード画面を作成しよう上記のLoadDialogue AsyncTaskをコピーして貼り付ける代わりに、各アクティビティ(前にやっていてうまく動作していた)を使用したいアクティビティです。