2011-04-07 21 views
0

これを動作させようとする中で、さまざまな失敗が見られました。アクティビティを介して開始されるスレッドがあります。スレッドは、進行状況ダイアログを作成/表示し、スレッドを閉じる必要があります。ProgressDialogをスレッドに表示させることができません。

私はProgressDialogを直接表示しようとしたとき、私のルーパーが準備されていないというエラーが出ました。私はルーパーを見上げて、それを実装しました。しかし、進捗ダイアログが表示されるようにLooper.loopを呼び出さなければなりませんでした。それが現れた後、アプリケーションはその時点で凍ってしまい、Looper.loopコールを過ぎることはありません。

私はそれを動作させることができませんでしたので、全く新しい方法HandlerThreadとハンドラを使用して探しました。 HandlerThreadを作成して起動します。私はスレッドからルーパーを取得し、ハンドラを作成します。私のProgressDialogまたはトーストはまったく表示されません。

これを行う簡単な方法はありますか?

+0

ここにコードを投稿できますか... – Vinay

答えて

1

Uは

を持つことができます
private Handler stopProgressHandler = new Handler() { 
    @Override 
    public void handleMessage(Message msg) {   
     setProgressBarIndeterminateVisibility(false); 
    } 
}; 
private Handler startProgressHandler = new Handler() { 
    @Override 
    public void handleMessage(Message msg) {   
     setProgressBarIndeterminateVisibility(true); 
    } 
}; 

uが起動したときに、スレッドがprogressbarを開始し、スレッドが完了した後にuはprogressbarを停止することができますように。これは、これは解決策の1 ..

1

ProgressDialogについてはわかりませんが、AndroidのすべてのUI関連のものは、私が知っている限りUIスレッドで更新する必要があります。非同期タスクを実行するための簡単なヘルパークラスは、実際にあります:http://developer.android.com/reference/android/os/AsyncTask.htmlまた

、あなたは(UIスレッドになります)ハンドラを作成して、それを使用してダイアログを作成することができます。

Handler uiHandler; 
//Activity onCreate 
onCreate(...){ 
    uiHandler = new Handler(); 
} 

// Somewhere in your other thread, 
uiHandler.postRunnable(new Runnable(){ 
    @Override 
    public void run(){ 
     // Create or update dialog 
     ... 
    } 
}); 
+1

代わりにrunOnUiThread()を使用します。http://developer.android.com/reference/android/app/Activity.html#runOnUiThread%28java.lang.Runnable%29 –

0

最後の答えが間違っているでしょう。..起動と停止にprogressbarを呼び出すのに役立ちます

public void closeProgressbar(){ 
    //bluetoothconnector.onDestroy(); 
    stopProgressHandler.sendEmptyMessage(0); 
} 
public void openProgressbar(){ 
    //bluetoothconnector.onDestroy(); 
    startProgressHandler.sendEmptyMessage(0); 
} 

....

それは次のようになります。

setProgressBarIndeterminateVisibility(Boolean.TRUE | Boolean.FALSE);

関連する問題