2012-04-10 4 views
1

アクティビティ(たとえばA)では、別のアクティビティ(B)の結果に応じて特定のタスクを実行する必要があります。 startActivityForResult()を使用してアクティビティBを開始します。別のアクティビティの結果を待ちます

//Statements 
//startActivityForResult(activityB) 
//get the result in some local variable for activity A. result is a boolean 
//if(result==true) do something 
//else do something else 

今、私が直面してる問題は、活動Bを開始した後、それが代わりにBから到着する結果を待たないということである (活動Aで):擬似コードは次のようなものですブール値のデフォルト値が使用され、使用されます。 どのような解決策ですか?

この特定のブロックが別のスレッドにあった場合、同期ブロックを作成し、アクティビティBを開始した後にwait()を発行してからonActivityResult()でnotify()を発行します。 しかし、1つのスレッドしかないので、それは正しいオプションではありませんか?

アクティビティBは、ユーザー入力のYes/Noを取って返します。したがって、それを開始するとすぐに結果が得られません

答えて

4

すべての解決策はありますか?

コードリストの最後の2行をonActivityResult()に置き換えます(described in the Android documentation)。

もっと重要なのは、実際にsetResult()を使用してactivityAに結果を返すための指示に従うために、activityBも書き直す必要があることです。

+0

私はactivityBの結果を得るのに問題はありません。私は希望の結果を得る。しかし、activityAでは、startActivityForResult()行の後で、変数resultのデフォルト値を使用するだけです。 アクティビティBがYes/Noのユーザ入力を受け取り、それを返すことを言及する必要があります。だから、それを開始するとすぐに結果が得られません。 – Alabhya

+0

@Alabhya: "しかし、activityAでは、startActivityForResult()行の後、変数結果のデフォルト値を使用するだけです。" - もちろん。 'startActivityForResult()'はブロッキング呼び出しではなく、アクティビティーは戻ったときにまだ開始されていません。 – CommonsWare

+0

ああ私はそれがブロックされていると思った。だから、代わりの方法は何でしょうか?待機通知やそのようなものを使用する方法はありますか? – Alabhya

関連する問題