在onBackPressed()上没有触发onActivityResult()

时间:2017-01-30 16:39:00

标签: android onactivityresult onbackpressed

我只想在按下“后退”按钮时将Activity2中的对象信息交换回Activity1。 一切正常,但在活动1中onActivityResult(..)从未触发。因此我无法访问意图信息。谁知道为什么?

我检查了这些答案,但它们不起作用:

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();
    }
}

2 个答案:

答案 0 :(得分:4)

根据android中startActivityForResult

的文档
  

与使用no调用startActivityForResult(Intent,int,Bundle)相同   选项。

     

意图意图:开始的意图。

     

requestCode int:如果&gt; = 0,将返回此代码   活动退出时的onActivityResult()。

现在你做的是:startActivityForResult(intent, Activity.RESULT_OK);

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

答案 1 :(得分:2)

您没有在Activity1.java上提及请求代码,而是编写了Activity.RESULT_OK,这是一个结果代码。

startActivityForResult(intent, Activity.RESULT_OK);

应该是:

startActivityForResult(intent, REQUEST_CODE);

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