2010-12-02 17 views
0

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をコピーして貼り付ける代わりに、各アクティビティ(前にやっていてうまく動作していた)を使用したいアクティビティです。

答えて

1

あまりにも驚くことではありませんが、それは "点滅"ですか? doInBackground()はほとんど何もしません...タスクは即座に完了します。あなたのバックグラウンドタスクで実際に何らかの処理や進行を待っていることを偽造したい場合はsendEmptyMessage()の代わりにsendEmptyMessageDelayed()を使ってみてください。

関連する問題