按BACK按钮时,setResult不起作用
我正在按BACK按钮后尝试设置结果。 我打电话给onDestroy
Intent data = new Intent();
setResult(RESULT_OK, data)
但是当涉及到
onActivityResult(int requestCode, int resultCode, Intent data)
resultCode为0(RESULT_CANCELED),数据为'null'。
那么,我怎样才能通过BACK按钮终止活动的结果呢?
您需要覆盖onBackPressed()方法并在调用超类之前设置结果,即
@Override
public void onBackPressed() {
Bundle bundle = new Bundle();
bundle.putString(FIELD_A, mA.getText().toString());
Intent mIntent = new Intent();
mIntent.putExtras(bundle);
setResult(RESULT_OK, mIntent);
super.onBackPressed();
}
Activity
结果必须在 finish()
被调用之前设置。 单击BACK实际上会在您的activity
调用finish()
,因此您可以使用以下片段:
@Override
public void finish() {
Intent data = new Intent();
setResult(RESULT_OK, data);
super.finish();
}
如果您调用NavUtils.navigateUpFromSameTask();
在onOptionsItemSelected()
, finish()
被调用,但你会得到错误的result code
。 所以你必须在onOptionsItemSelected()
调用finish()
而不是navigateUpFromSameTask
。 onActivityResult中的错误requestCode
如果你想在onBackPressed
事件中设置一些自定义的RESULT_CODE
,那么你需要先设置result
,然后调用super.onBackPressed()
并且你将在调用者活动的onActivityResult
方法中收到相同的RESULT_CODE
@Override
public void onBackPressed()
{
setResult(SOME_INTEGER);
super.onBackPressed();
}
链接地址: http://www.djcxy.com/p/31895.html
上一篇: setResult does not work when BACK button pressed
下一篇: How to access count property of a dynamic type in C# 4.0?