2009-07-03 16 views
1

runメソッドからダイアログをポップアップしようとしていますが、同じメソッドを呼び出すとLooper.prepareが呼び出されないという例外があります。例外はありませんが、表示されるポップアップダイアログは表示されませんコンソールで。私はこのようにハンドラを使用してきたように、run()メソッドのダイアログを表示

handler = new Handler() { 
    public void handleMessage(Message msg) { 
     showDialog(DIALOG1_KEY); 
     // process incoming messages here 
    } 
}; 

は、私は再び任意の例外を得ていないのですが、それでも、私は間違ったことをやっているところ運がすべてのボディは、私に言うことはできません。

答えて

3

あなたが提供したコードスニペットからは分かりにくいですが、ハンドラを間違って使用していると思います。

あなたがする必要があるのは、たとえば、フィールド変数として定義するなどして、新しいスレッドHandlerオブジェクトをメインスレッド上で初期化することです。

private Handler handler = new Handler(); 

その後、あなたはGUIスレッド上で実行する命令を含ん新しいRunnableを作成する(ただし、これはあなたのバックグラウンドスレッドのrunメソッドから呼び出されます)。

private Runnable runOnGUI = new Runnable() { 
    private void run() { 
    showDialog(DIALOG1_KEY); 
    } 
}; 

は、その後、あなたのrunメソッド内あなたは、GUIスレッドであなたの runOnGUI方法を投稿するハンドラオブジェクトを使用する必要があります。

private Runnable runInBackground = new Runnable() { 
    private void run() { 
    handler.post(runOnGUI); 
    // Do processing 
    } 
}; 
+4

Android 1.1以来利用可能なrunOnUiThread(Runnable)メソッドを使用することもできます。これはまったく同じことですが、コードの行は約1行少なくなります。 –

関連する問題