2011-08-31 11 views
6

私のアンドロイドアプリでは、2つのサブアクティビティをインテントで作成する主なアクティビティがあります。現在、両方のサブアクティビティはメインアクティビティに結果を返します。私の主な活動では、 どのように2つの "onActivityResult(int requestCode、int resultCode、Intent data)"を扱うことができますか?あなたはstartActivityForResultを呼び出すときに使用requestCodeを変更複数のアクティビティを持つAndroidアプリでonActivityResultを処理する

おかげ

答えて

10

..私の質問がクリアされている願っています。

EDIT:

startActivityForResult(i, App.REQUEST_ENABLE_BT); 

と、この:

startActivityForResult(i, App.MANUAL_INPUT); 

、その後、あなたがこのような結果フィルタ:

protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 
     super.onActivityResult(requestCode, resultCode, data); 

     if(resultCode == RESULT_OK){ 
      switch(requestCode){ 
      case App.REQUEST_ENABLE_BT: 
       if(resultCode != RESULT_OK){ 
        Toast.makeText(this, getString(R.string.label_bluetooth_disabled), Toast.LENGTH_LONG).show(); 
       } 
       break; 
      case App.MANUAL_INPUT: 
       break; 
     } 
} 
+2

異なる結果をrequestcode swicth使用することができます。実際、 'Toast'は到達不可能なコードです。なぜなら、' resultCode'が 'RESULT_OK'と等しい場合にのみスイッチを入力するからです。 'requestCode'には常に外側(単一の)' switch'を使用し、異なる 'resultCodes'に対してはすべての' case'チェックの中で使うべきです。数行のコードを保存するための他の設計は、最終的にはバグの原因になります。 – thelawnmowerman

9

requestCodeです例えば、私はこれを使用〜のためです。だから、ACTIVITY1とACTIVITY2があなたのActivityで定数である。この

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 
    super.onActivityResult(requestCode, resultCode, data); 
    switch(requestCode) 
     case ACTIVITY1: 
      if(resultCode == RESULT_OK) 
       Toast.makeText(getApplicationContext(), "Activity 1 returned OK", Toast.LENGTH_LONG).show(); 
      break; 
     case ACTIVITY2: 
      if(resultCode == RESULT_OK) 
       Toast.makeText(getApplicationContext(), "Activity 2 returned OK", Toast.LENGTH_LONG).show(); 
      break; 
} 

のようなセットアップを持っていると思います。あなたがそうのようにそれらを呼びたい:

startActivityForResult(activity1Intent, ACTIVITY1);

startActivityForResult(activity2Intent, ACTIVITY2);

3

それは、結果の意図パラメータにsubactivityからあらゆる種類のデータを返すことが可能です:

サブの活動:

Intent intent = new Intent(); 
intent.putExtra ("string_1", "hello"); 
intent.putExtra ("string_2", "world"); 
intent.putExtra ("int_1", 1000); 
intent.putExtra ("long_1", 2000l); 
activity.setResult (Activity.RESULT_OK, intent); 

_

親アクティビティ:

@Override 
protected void onActivityResult (int requestCode, int resultCode, Intent intent) 
{ 
    if (resultCode == Activity.RESULT_OK) 
    { 
     String string_1 = intent.getStringExtra ("string_1", ""); 
     String string_2 = intent.getStringExtra ("string_2", ""); 
     int int_1 = intent.getIntExtra ("int_1", 0); 
     long long_1 = intent.getLongExtra ("long_1", 0); 
    } 
} 
1

あなたはこれは本当に悪いデザインです

public void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 

     super.onActivityResult(requestCode, resultCode, data); 

     switch (requestCode) { 

      case (1): 
      { 
      // do this if request code is 1. 
      } 
      break; 

      case (2): 
      { 
      // do this if request code is 2. 
      } 
      break; 
    } 
関連する問題