Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java onActivityResult无法使用onBackPressed?_Java_Android_Android Activity_Onactivityresult - Fatal编程技术网

Java onActivityResult无法使用onBackPressed?

Java onActivityResult无法使用onBackPressed?,java,android,android-activity,onactivityresult,Java,Android,Android Activity,Onactivityresult,我有两个活动,Activity1.java和Activity2.java。Activity1.java启动Activity2.java,当用户按下操作栏上的“后退”按钮时,我需要Activity2.java将一些数据返回给Activity1.java。但由于某些原因,它不起作用 Activity1.java: public class Activity1 extends AppCompatActivity { @Override protected void onCreate(

我有两个活动,Activity1.java和Activity2.java。Activity1.java启动Activity2.java,当用户按下操作栏上的“后退”按钮时,我需要Activity2.java将一些数据返回给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);

您没有正确调用意图:

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

您需要在按下ActionBar back/home按钮时返回结果,但您在底部的back按钮中添加了代码

因此,当按下ActionBar back按钮时,在Activity2中传输要处理的代码,从而覆盖OnOptions ItemSelected,home按钮的id为android.R.id.home


您需要在按下ActionBar back/home按钮时返回结果,但您在底部的back按钮中添加了代码

因此,当按下ActionBar back按钮时,在Activity2中传输要处理的代码,从而覆盖OnOptions ItemSelected,home按钮的id为android.R.id.home


您的代码有3个问题

一,。从Activity1开始,您将启动自身,而不是Activity2。从更改代码

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

二,。在Activity2的onBackPressed中,不需要在intent中声明Activity1,从

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

三,。在Activity1中,您应该在进一步处理之前检查requestCode,以确保数据从正确的活动返回,因为您可能会启动多个活动

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

您的代码有3个问题

一,。从Activity1开始,您将启动自身,而不是Activity2。从更改代码

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

二,。在Activity2的onBackPressed中,不需要在intent中声明Activity1,从

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

三,。在Activity1中,您应该在进一步处理之前检查requestCode,以确保数据从正确的活动返回,因为您可能会启动多个活动

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

通过覆盖OnOptions ItemSelected>case android.R.id.Home来尝试您的代码,在活动2中,通过覆盖OnOptions ItemSelected>case android.R.id.Home来尝试您的代码,在活动2中,通过覆盖OnOptions ItemSelected>case android.R.id.Home来尝试您的代码。尽管每个人的评论都很有帮助,并最终导致您弄清楚问题是,这一点我根本没有意识到,我一直在用动作栏的后退按钮进行测试!所以我把这个作为答案。非常感谢。虽然每个人的评论都很有帮助,并最终找出了问题所在,但这一点我根本没有意识到,我一直在用操作栏的后退按钮进行测试!所以我把这个作为答案。非常感谢。