0

親アクティビティと子アクティビティの2つのアクティビティがありますが、子アクティビティは別のアクティビティによってもトリガーされます。ここで、子アクティビティがこの親アクティビティからトリガーされた場合にのみ、この子アクティビティの結果を親アクティビティに返したいと思います。

子供が発信者のアクティビティを見つける方法はありますか(そのため、その発信者のアクティビティに対してのみいくつかの計算が行われます)。これを回避する方法はありますか?

intent.putExtra("caller", "MainActivity");
startActivity(intent);

これ欲しい:

if (ParentActivity)
{  //do something and finish() }
if (AnotherActivity)
{  //do something more and finish() }
4

1 に答える 1

0

はい、結果を処理するために選択した親アクティビティのstartActivityForResult()を使用してこれを行うことができます。

終了時に結果が必要なアクティビティを開始します。このアクティビティが終了すると、onActivityResult()メソッドが指定されたrequestCodeで呼び出されます。負のrequestCodeを使用することは、startActivity(Intent)を呼び出すことと同じです(アクティビティはサブアクティビティとして起動されません)。

基本的に、親アクティビティでは次のことができます。

Intent intent = ...
startActivityForResult(intent, SOME_UNIQUE_INT_CODE);

次に、 onActivityResult()である結果を処理するメソッドを定義する必要があります

protected void onActivityResult(int requestCode, int resultCode,
             Intent data) {
         if (requestCode == SOME_UNIQUE_INT_CODE) {
              // do something
         }
     }

子アクティビティ内で、setResult()を使用して結果を設定できます。このメソッドには2つのバリエーションがあり、そのうちの1つはデータを渡す可能性を提供します。

使用方法の詳細については、ドキュメントをお読みください。

編集:

呼び出されたアクティビティからgetCallingActivity()を使用して、どちらが親アクティビティであるかを見つけることができますが、これはstartActivityForResultを使用した場合にのみ機能します。

このアクティビティを呼び出したアクティビティの名前を返します。これは、setResult()のデータの送信先です。この情報を使用して、受信者がデータの受信を許可されていることを検証できます。

注:呼び出し元のアクティビティが結果を期待していない場合(つまり、要求コードを含むstartActivityForResult(Intent、int)フォームを使用しなかった場合)、呼び出し元のパッケージはnullになります。

于 2012-10-20T14:28:49.540 に答える