开始结果活动:
Intent intent = new Intent(MainActivity.this, DetailsActivity.class);
startActivityForResult(intent,EVENT_DETAILS_REQUEST);
在我的DetailsActivity中,设置结果和附加内容,可以在主要活动中使用:
@Override
public void onBackPressed()
{
Intent resultIntent = new Intent();
resultIntent.putExtra("isEdited",isEdited);
setResult(RESULT_OK,resultIntent);
finish();
}
最后,在MainActivity中:
@Override
protected void onActivityResult(int requestCode, int resultCode, @NonNull Intent data)
{
switch(requestCode)
{
......
case EVENT_DETAILS_REQUEST:
boolean isEdited = data.getBooleanExtra("isEdited", false);
.......
break;
}
}
只要用户使用“后退”硬件(或系统导航栏)按钮关闭DetailsActivity就可以了。如果用户点按活动顶部的“返回”箭头以关闭活动,则系统不会调用onBackPressed
,并且onActivityResult
数据将为空。
我尝试使用onPause
,onStop
,onFinish
代替onBackPressed
来管理它的工作,但我data
为{{{} 1}}总是为空。
解决问题的正确方法是什么?
答案 0 :(得分:3)
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case android.R.id.home:
onBackPressed();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
在详细活动中覆盖此方法...以及此代码
答案 1 :(得分:1)
在DetailsActivity中添加此内容
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == android.R.id.home) {
Intent resultIntent = new Intent();
resultIntent.putExtra("isEdited",isEdited);
setResult(RESULT_OK,resultIntent);
finish();
}
return super.onOptionsItemSelected(item);
}
答案 2 :(得分:1)
您可以执行此操作以在所有可能的近距离情况下发送结果:
@Override
public void finish() {
Intent data = new Intent();
Intent resultIntent = new Intent();
resultIntent.putExtra("isEdited", isEdited);
setResult(RESULT_OK, resultIntent);
super.finish();
}
答案 3 :(得分:0)
当硬件反向压缩时自动调用..
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
//your code here
return true;
}
return super.onKeyDown(keyCode, event);
}