Java onActivityResult无法使用onBackPressed?
我有两个活动,Activity1.java和Activity2.java。Activity1.java启动Activity2.java,当用户按下操作栏上的“后退”按钮时,我需要Activity2.java将一些数据返回给Activity1.java。但由于某些原因,它不起作用 Activity1.java: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(
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来尝试您的代码。尽管每个人的评论都很有帮助,并最终导致您弄清楚问题是,这一点我根本没有意识到,我一直在用动作栏的后退按钮进行测试!所以我把这个作为答案。非常感谢。虽然每个人的评论都很有帮助,并最终找出了问题所在,但这一点我根本没有意识到,我一直在用操作栏的后退按钮进行测试!所以我把这个作为答案。非常感谢。