我正在构建一个应用程序,其中第一个Activity由startActivityByResult
启动另一个Activity。完成一些设置后,我需要重新发送设置结果。
所以我覆盖第二个Activity的onPause()
方法,我得到了意图putExra
,并通过setResult()
发回。
回到第一个活动。肯定被称为onActivityResult
。我之前设置了resultCode,但意图数据为null。我无法弄清楚出了什么问题。
这是我的代码:
第一个活动
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.e("page1", requestCode + "_");
Log.e("page1", resultCode + "_");
Log.e("page1", (data == null) + "_");
// if ((requestCode == 1) && (data != null)) {
if (data != null) {
String size = data.getStringExtra("size");
Log.e("switch", size + "_");
switch (size.charAt(0)) {
case '1': {
text.setTextSize(10);
}
break;
case '2': {
text.setTextSize(20);
}
break;
case '3': {
text.setTextSize(30);
}
break;
}
}
}
我的第二个活动
@Override
protected void onPause() {
Intent intent = getIntent();
Log.e("prefs", (intent == null) + "_");
intent.putExtra("size", size);
setResult(3, intent);
super.onPause();
}
我在LogCat中测试过。在第二个活动中。要发送的意图绝对不是空的。但是当它进入第一个Activity时。 Null刚回来。这让我非常疯狂。
答案 0 :(得分:1)
您的代码问题在String size = data.getStringExtra("size");
这一行。
您应该使用String size = data.getExtras.getString("size");
在您的第一项活动中:
Intent intent = new Intent(context,SecondActivity.class);
startActivityForResult(intent, REQUEST_CODE);
在你的第二个活动中,在其监听器中创建一个名为SAVE
的按钮;
Intent result = new Intent();
Bundle bundle = new Bundle();
bundle.putString("keyName", "KeyValue");
result.putExtras(bundle);
setResult(RESULT_OK,result);
finish();
再次在您的第一个活动的onActivityresult
方法中:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(resultCode==RESULT_OK){
if(requestCode == REQUEST_CODE){
Log.d("Activity Result", data.getExtras.getString("keyName");
}
}
}
答案 1 :(得分:0)
你能试试吗? 你想在所有情况下手动暂停并在后退时自动完成你的活动,所以最好将你的意图数据保存在onDestroy中
@Override
protected void onPause() {
super.onPause();
finish();
}
@Override
public void onDestroy() {
Intent intent = getIntent();
intent.putExtra("size", size);
setResult(3, intent);
super.onDestroy();
}