【发布时间】:2010-12-07 23:51:46
【问题描述】:
在测试过程中,我注意到有时我的子活动的 finish() 不会执行 onActivityResult。大多数情况下它都可以正常工作,但我不知道何时以及为什么会出现此问题。
子活动开始:
public void launchSubActivity(Class<? extends Activity> subActivityClass, Bundle data,
OnSubActivityResult callback) {
Intent i = new Intent(this, subActivityClass);
if(data!=null) i.putExtras(data);
Random rand = new Random();
int correlationId = rand.nextInt();
_callbackMap.put(correlationId, callback);
startActivityForResult(i, correlationId);
}
子活动完成:
public void select() {
Bundle b = new Bundle();
b.putInt("YEAR", year_result);
b.putInt("MONTH", month_result);
b.putInt("DAY", day_result);
this.getIntent().putExtras(b);
this.setResult(RESULT_OK, this.getIntent());
this.finish();
}
onActivityResult(Nazmul Idris):
/**
* this is the underlying implementation of the onActivityResult method that
* handles auto generation of correlationIds and adding/removing callback
* functors to handle the result
*/
@Override
protected void onActivityResult(int correlationId, int resultCode,
Intent data) {
Log.d(Prototype.TAG, "SimpleActivity Result "+resultCode);
try {
OnSubActivityResult callback = _callbackMap.get(correlationId);
switch (resultCode) {
case Activity.RESULT_CANCELED:
callback.onResultCancel(data);
_callbackMap.remove(correlationId);
break;
case Activity.RESULT_OK:
callback.onResultOkay(data);
_callbackMap.remove(correlationId);
break;
default:
Log.e(Prototype.TAG,
"Couldn't find callback handler for correlationId");
}
} catch (Exception e) {
Log
.e(Prototype.TAG,
"Problem processing result from sub-activity", e);
}
}
【问题讨论】:
-
你能发布你的 onActivityResult() 实现吗?
-
你什么时候打电话给
select()? -
select() 在子活动中单击按钮时被调用。我用调试器检查并确定 select() 总是被执行,而第一次登录 onActivityResult 并不总是显示。
标签: android subactivity