2012-01-20 12 views
1

私は主なアクティビティでいくつかのスレッドを実行しています。これらのスレッドが実行されている間、私はスレッドの結果を表示するためのサブアクティビティを作成します。アクティビティ間でハンドラを渡す

主なアクティビティは、スレッドの処理結果(サブアクティビティが実行されているために状態がonPause()であっても)に通知されます。

((MainActivity) getParent()).setMainActivityHandler(handler)を呼び出すことによって、サブアクティビティからメインアクティビティに別のハンドラを渡します。setMainActivityHandler()は、ちょうど初期化メソッドにすぎませんが、メインアクティビティでハンドラを初期化します。メインアクティビティのハンドラのスレッドがMessageをハンドラー経由でメインアクティビティーに送信すると、メインアクティビティーは別のハンドラーを介してサブアクティビティーに別のMessageの同じマッサージまたは変更バージョンを送信します。したがって、サブアクティビティはこのメッセージの内容に従ってビューを更新します。

ただし、((MainActivity) getParent())nullを返します。どのように私はこれを行うことができます。他の方法はありますか?

PS:両方のアクティビティがアクティビティを延長します。マニフェストファイルには、メインアクティビティ(action.VIEW & category.DEFAULT)用のインテントフィルタがあり、サブアクティビティ用のインテントフィルタはありません。

答えて

0

ストレートハンドラの代わりに、Messengerを使用します(これはプロセス間/アクティビティメッセージ用に設計されています)。

これは、実行中のアクティビティにバインドするサービスを実行し、バックグラウンドタスクに基づいてメッセージを送信する方法ですが、これを行う必要はありません。

2番目のアクティビティで静的メッセンジャーを宣言し、サブアクティビティが作成されたときに初期化し、静的メッセンジャーがnullでないときに主なアクティビティからメッセージを送信することができます(一時停止/そのサブアクティビティ、または表示されているかどうかを静的に追跡)

関連する問題