我用
Activity
从原来的 Activity
开始一个新的 startActivityForResult(intent, requestCode)
。我想当用户按下后退按钮时将数据返回到原始Activity
,因此当返回到原始Activity
时。我尝试了两种方法:
压倒一切
onBackPressed()
:
@Override
public void onBackPressed() {
super.onBackPressed();
Intent intent = new Intent();
intent.putIntegerArrayListExtra(SELECTION_LIST, selected);
setResult(RESULT_OK, intent);
}
压倒一切
onPause()
:
@Override
protected void onPause() {
super.onPause();
Intent intent = new Intent();
intent.putIntegerArrayListExtra(SELECTION_LIST, selected);
setResult(RESULT_OK, intent);
}
不幸的是,它们都不起作用(
resultCode
不是RESULT_OK
中的onActivityResult()
)。执行此操作的正确方法是什么?谢谢!
试试这个:
@Override
public void onBackPressed() {
// super.onBackPressed();
Intent intent = new Intent();
intent.putIntegerArrayListExtra(SELECTION_LIST, selected);
setResult(RESULT_OK, intent);
finish();
}
由于这个问题仍然受到关注,我发布了一个比两年前接受的答案更正确的答案,感谢MasterGaurav的提示。
@Override
public void onBackPressed() {
Intent intent = new Intent();
intent.putIntegerArrayListExtra(SELECTION_LIST, selected);
setResult(RESULT_OK, intent);
super.onBackPressed();
}
试试这个:
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
onBackPressed();
return true;
}
return super.onKeyDown(keyCode, event);
}
使用
startActivityForResult(intent, requestCode)
从原始 Activity 启动新 Activity
当用户按下后退按钮时想要将数据返回到原来的Activity,那么当返回到原来的Activity时。
@Override
public void onBackPressed() {
super.onBackPressed();
Intent intent = new Intent();
intent.putIntegerArrayListExtra(SELECTION_LIST, selected);
setResult(RESULT_OK, intent);
}
如果您想从新打开的活动中获取结果,只需覆盖
onActivityResult(int requestCode, int resultCode, Intent data)
原始 Activity 的方法
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
}
试试这个:
@Override
public void onBackPressed() {
super.onBackPressed();
Intent intent = new Intent();
intent.putIntegerArrayListExtra(SELECTION_LIST, selected);
setResult(RESULT_OK, intent);
finish();
}
尽管如此,搜索此内容的人和 OnBackPressed 已被弃用。我正在使用可能对某人有帮助的替代方案。
我使用的是 onBackPressed 方法:
@Override
protected void onResume() {
super.onResume();
getOnBackPressedDispatcher().addCallback(FlatMediaActivity.this, callback);
}
OnBackPressedCallback callback = new OnBackPressedCallback(true) {
@Override
public void handleOnBackPressed() {
completeActionAndSetResult();
}
};
这是completeActionAndSetResult()
Intent intent = new Intent();
intent.putIntegerArrayListExtra(SELECTION_LIST, selected);
setResult(RESULT_OK, intent);
callback.remove(); //to remove call back
finish();