onActivityResult 不适用于 onBackPressed?
onActivityResult not working with onBackPressed?
我有两个活动,Activity1.java
和 Activity2.java
。 Activity1.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. 在 Activity2
的 onBackPressed()
中,无需在意图中声明 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);
}
我有两个活动,Activity1.java
和 Activity2.java
。 Activity1.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. 在 Activity2
的 onBackPressed()
中,无需在意图中声明 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);
}