2017-01-30 53 views
1

我只是想按下“后退”按钮,将Activity2中的对象信息交换回Activity1。 一切工作正常,除了返回Activity1 onActivityResult(..)永远不会触发。因此我无法访问意向信息。有人知道为什么onActivityResult()onBackPressed()上没有触发

我检查了这些问题的答案,但他们不工作:

setResult does not work when BACK button pressed

How to pass data from 2nd activity to 1st activity when pressed back? - android

How to pass the values from one activity to previous activity

Send data to a parent activity onBackPressed

我的代码(如果你需要更多的,告诉我):

的AndroidManifest.xml:

 <activity 
      android:name="com.example.Activity1" 
      android:label="@string/app_name" 
      android:theme="@style/AppTheme.NoActionBar" 
      android:screenOrientation="portrait"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

     <activity 
      android:name="com.example.Activity2" 
      android:theme="@style/AppTheme.NoActionBar" 
      android:screenOrientation="portrait"> 
     </activity> 

Activity1.java:

public class MainActivity extends AppCompatActivity { 

    // other stuff... 

    private void showActivity2(Test test) { 
     Intent intent = new Intent(this, Activity2.class); 
     intent.putExtra("test", test.getSerializableObject()); 
     startActivityForResult(intent, Activity.RESULT_OK); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if (resultCode == RESULT_CANCELED) { 
      Test test = data.getExtras().getParcelable("test"); 
      // Do something... 
     } 
    } 

Activity2.java:

public class Activity2 extends AppCompatActivity { 

    // other stuff.... 

    @Override 
    public void onBackPressed() { 
     Intent intent = new Intent(); 
     intent.putExtra("test", test.getSerializableObject()); 
     setResult(Activity.RESULT_CANCELED, intent); 
     super.onBackPressed(); 
    } 
} 
+0

'onBackPressed()'最可能为时已晚。调用'setResult()'当用户在UI中做出正面的事情来说出他们想要的是什么(例如,单击列表项)。通常,你也可以调用'finish()',因为一旦用户决定他们想要什么,'Activity2'就不再需要了。 – CommonsWare

+0

我也尝试setResult(xxx),而Activity2正在更新的东西。仍然...看起来像Activity1通常忽略回调。 – Javatar

回答

4

按照在机器人文档startActivityForResult

与调用startActivityForResult(Intent,int,Bundle)相同,没有 选项。

intent意图:意向开始。

requestCode int:如果> = 0,则在活动退出时,此代码将在 onActivityResult()中返回。

你做现在这是什么:startActivityForResult(intent, Activity.RESULT_OK);

Activity.RESULT_OK实际值-1这就是为什么它没有返回结果。 当您为结果启动活动并在onActivityResult中过滤请求代码时,您需要有一个有效的请求代码。

+0

那是正确的。有趣的是,我已经在另一个上下文中正确使用了它... 'startActivityForResult(Intent.createChooser(intent,“Select Photo”),REQUEST_GALLERY);'它现在工作正常!谢谢。 – Javatar

2

你还没有提到Activity1.java上的请求代码,而不是你写的Activity.RESULT_OK这是一个结果代码。

startActivityForResult(intent, Activity.RESULT_OK); 

它应该是:

startActivityForResult(intent, REQUEST_CODE); 

REQUEST_CODE应该是最终的静态int值。