2011-07-03 13 views
7

私は、ユーザーがアイテムを選択することを期待するアクティビティを持っていますが、アイテムを選択せず​​に戻るボタンをクリックすることもできます。この「項目選択」アクティビティは、startActivityForResult()で開始されます。明示的にRESULT_CANCELEDに設定する必要がありますか?

私は2つのことが不思議でした。最初に、アイテムが実際に選択されたときにsetResult(RESULT_OK)だけで十分ですか?つまり、明示的に設定しないとRESULT_OKに設定されていない結果に依存できますか?これは(初期化されていない)結果に依拠するのに十分でない場合

第二には、それは大丈夫setResult()を複数回、SetResultを呼び出し、その後RESULT_CANCELEDに結果を「初期化」、そして初めて(RESULT_OK)を呼び出すことですユーザがアイテムを選択してアクティビティを終了する前に? documentationから

答えて

9

は:

(例えばクラッシュなど)子アクティビティが何らかの理由で失敗した場合

、 親アクティビティは、コード RESULT_CANCELEDで結果を受け取ることになります。

あなたが明示的に他のコードを指定しない のであれば、結果は、すでにRESULT_CANCELEDです。ユーザーが「戻る」ボタンを使用して アプリを終了すると、RESULT_CANCELEDも届きます。

+0

私はドキュメンテーションにそれを見ました。これは質問を促したものです。私が記述している事例は、その活動が「失敗する」ということではない。 Android APIのドキュメントでは、RESULT_CANCELEDがデフォルトであることを前提とした安全な仮定ではなく、setResultを2回以上呼び出すかどうかは明確ではありません。 –

+0

onActivityResultメソッドのドキュメントの別の行: "アクティビティが明示的にそれを返すか、結果を返さなかったか、操作中にクラッシュした場合、resultCodeはRESULT_CANCELEDになります。"したがって、結果を返さない場合、ユーザーが戻るボタンでアクティビティを終了する前に、結果はRESULT_CANCELLEDになります。 – Dirol

+0

setResultを複数回呼び出すことについては、実際にはdocでは未定義です。だから、私はそれに頼らないだろう。現在のAPIでうまく動作しても、将来的には動作するという保証はありません。 – Dirol

1

ActivityにはsetResult(RESULT_CANCELED)を使用し、finish()に電話することができます。

オーバーライドされたOnActivityResultでは、結果コードがキャンセルされた場合は、前述したようにします。

関連する問題