此代码正在打印日志,但是将null返回到父活动:
@Override
protected void onPause() {
super.onPause();
Log.d("Two", "onPause()");
Intent data = new Intent();
data.putExtra(TWO_CLICKS_FOR_ONE, mClicks2);
setResult(RESULT_OK, data);
}
似乎没有创建Intent,但正在执行日志行。这最终导致了一个错误,其中父活动的数据为null。父活动使用onActivityResult来检索数据:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.d("One", "onActivityResult()");
if (data == null) {
Log.d("One", "data == null !!!");
return;
}
mClicks2 = data.getIntExtra(Two.TWO_CLICKS_FOR_ONE, 0);
Log.d("One", "mClicks2 = " + mClicks2);
}
正如我所说,数据在此处具有空值,因此永远不会为mClicks2赋值。
当我在块的末尾放置super.onPause()调用时,事情发生了变化。现在一切都按预期工作:
@Override
protected void onPause() {
Log.d("Two", "onPause()");
Intent data = new Intent();
data.putExtra(TWO_CLICKS_FOR_ONE, mClicks2);
setResult(RESULT_OK, data);
super.onPause();
}
使用此代码实例化Intent数据,调用putExtra()和setResult(),并在父活动中成功为mClicks2分配值。
这种行为的原因是什么? Log.d()在super.onPause()之后执行,但Intent从未实例化。
答案 0 :(得分:1)
因为幕后安卓会在setResult(RESULT_OK, data);
来电期间处理您使用super.onPause()
设置的结果。如果您在致电super.onPause()
后设置了结果,那么您错过了将其传递回父活动的机会,那你就太迟了。为了使事情正常工作,您必须遵守活动的生命周期。