onActivityResult 不适用于 onBackPressed?

onActivityResult not working with onBackPressed?

我有两个活动,Activity1.javaActivity2.javaActivity1.java 启动 Activity2.java,当用户按下操作栏上的后退按钮时,我需要 Activity2.java 到 return 一些数据返回到 Activity1.java。但是由于某种原因,它不起作用...

Activity1.java:

public class Activity1 extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_1);

        Intent intent = new Intent(this, Activity1.class);
        int requestCode = 100;

        startActivityForResult(intent, requestCode);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        Log.i("TEST", "RequestCode:" + requestCode);
        Log.i("TEST", "ResultCode:" + resultCode );
        switch (resultCode) {
            case RESULT_OK:
                Log.i("TEST", data.getStringExtra("MESSAGE"));
                break;
        }
        super.onActivityResult(requestCode, resultCode, data);
    }

Activity2.java

public class Activity2 extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_2);
    }

    @Override
    public void onBackPressed() {
        Intent intent = new Intent(this, Activity1.class);
        intent.putExtra("MESSAGE", "Hello from Activity 2!");
        Log.i("TEST", "Setting result...");
        setResult(RESULT_OK, intent);
        finish();
        super.onBackPressed();
    }
}

当我 运行 应用程序时,只有“设置结果...”记录到 Logcat。似乎甚至没有调用 onActivityResult 覆盖。我尝试更改请求代码、结果代码,并在 Activity2 的 onCreate() 方法中设置结果,但没有任何效果。

有人能帮忙吗?如有任何帮助,我们将不胜感激!

您没有正确调用意图:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_1);

    Intent intent = new Intent(this, Activity1.class);
    int requestCode = 100;

    startActivityForResult(intent, requestCode);
}

应该是:

Intent intent = new Intent(this, Activity2.class);

您需要 return 按 ActionBar back/home 按钮时的结果,但您在底部后退按钮中添加了代码。

因此,将Activity2中的代码转移到按下ActionBar后退按钮时处理,因此Override onOptionsItemSelected,home按钮的id为[=15] =].

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (item.getItemId() == android.R.id.home) {
        Intent intent = new Intent(this, Activity1.class);
        intent.putExtra("MESSAGE", "Hello from Activity 2!");
        Log.i("TEST", "Setting result...");
        setResult(RESULT_OK, intent);
        finish();
        return true;
    }
    return super.onOptionsItemSelected(item);
}

您的代码有 3 个问题。

1.Activity1,你自己开始而不是 Activity2。从

更改您的代码
Intent intent = new Intent(this, Activity1.class);

Intent intent = new Intent(this, Activity2.class);

2.Activity2onBackPressed() 中,无需在意图中声明 Activity1,将代码从

Intent intent = new Intent(this, Activity1.class);

Intent intent = new Intent();

3. In Activity1,你应该在进一步处理之前检查requestCode以确保数据return来自正确的activity, 因为你可能会启动多个 activity.

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    Log.i("TEST", "RequestCode:" + requestCode);
    Log.i("TEST", "ResultCode:" + resultCode);
    if (requestCode == 100) {
        switch (resultCode) {
            case RESULT_OK:
                Log.i("TEST", data.getStringExtra("MESSAGE"));
                break;
        }
    }
    super.onActivityResult(requestCode, resultCode, data);
}