onActivityResult() 未在 onBackPressed() 上触发

Jav*_*tar 2 android onactivityresult onbackpressed

当按下“返回”按钮时,我只想将对象信息从 Activity2 交换回 Activity1。 一切正常,除了在 Activity1onActivityResult(..)中永远不会被触发。因此我无法访问意图信息。有谁知道为什么?

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

按下后退按钮时 setResult 不起作用

按下时如何将数据从第二个活动传递到第一个活动?- 安卓

如何将值从一个活动传递到前一个活动

将数据发送到父活动 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>
Run Code Online (Sandbox Code Playgroud)

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...
        }
    }
Run Code Online (Sandbox Code Playgroud)

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

Rod*_*uin 6

根据android中的文档 startActivityForResult

与不带选项调用 startActivityForResult(Intent, int, Bundle) 相同。

意图意图:开始的意图。

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

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

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