2011-08-31 74 views
6

在我的android应用程序中,我有一个主要活动,通过意图创建另外两个子活动。现在,子活动都将结果返回到主活动。在我的主要活动中, 如何处理两个“onActivityResult(int requestCode,int resultCode,Intent data)”,因为它无法在给定的类中使用两个具有相同名称的方法。希望我的问题是明确的..在具有多个活动的Android应用程序中处理onActivityResult

感谢

回答

10

您更改,当你调用startActivityForResult使用requestCode

编辑:比如,我用这个:

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

这是一个非常糟糕的设计。事实上,'Toast'是无法访问的代码,因为只有当'resultCode'等于'RESULT_OK'时才进入交换机。你应该总是在'requestCode'中使用一个外部(和单个)'switch',并且在每个'case'中检查不同的'resultCodes'。任何其他用于保存几行代码的设计最终都会成为bug的来源。 – thelawnmowerman

9

这是什么requestCode是为了。所以,你不得不这样

@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; 
} 

一个设置,其中活性1和活性2在你Activity常数。你会打电话给他们,像这样:

startActivityForResult(activity1Intent, ACTIVITY1);

startActivityForResult(activity2Intent, ACTIVITY2);

3

有可能从一个子活动的结果意图参数返回任何类型的数据:

撒哈拉活动:

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

您可以使用swicth的requestcode不同的结果

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; 
    } 
相关问题