Android - 在 activity 上设置 activity 结果关闭
Android - set activity result on activity closed
开始 activity 结果:
Intent intent = new Intent(MainActivity.this, DetailsActivity.class);
startActivityForResult(intent,EVENT_DETAILS_REQUEST);
在我的 DetailsActivity 中,设置结果和附加功能,可以在主程序中使用 activity:
@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;
}
}
只要用户使用 "Back" 硬件(或系统导航栏)按钮关闭 DetailsActivity,就可以了。如果用户点击 activity 顶部的 "Back" 箭头关闭 activity,onBackPressed
将不会被调用并且 onActivityResult
数据将为空。
我尝试使用 onPause
、onStop
、onFinish
而不是 onBackPressed
来管理它的工作,但我得到 data
onActivityResult
始终为空。
解决我的问题的正确方法是什么?
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case android.R.id.home:
onBackPressed();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
在您的详细信息中覆盖此方法activity...和此代码
将此添加到您的 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);
}
这会在硬件反压时自动调用..
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
//your code here
return true;
}
return super.onKeyDown(keyCode, event);
}
您可以这样做以在所有可能的关闭情况下发送结果:
@Override
public void finish() {
Intent data = new Intent();
Intent resultIntent = new Intent();
resultIntent.putExtra("isEdited", isEdited);
setResult(RESULT_OK, resultIntent);
super.finish();
}
开始 activity 结果:
Intent intent = new Intent(MainActivity.this, DetailsActivity.class);
startActivityForResult(intent,EVENT_DETAILS_REQUEST);
在我的 DetailsActivity 中,设置结果和附加功能,可以在主程序中使用 activity:
@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;
}
}
只要用户使用 "Back" 硬件(或系统导航栏)按钮关闭 DetailsActivity,就可以了。如果用户点击 activity 顶部的 "Back" 箭头关闭 activity,onBackPressed
将不会被调用并且 onActivityResult
数据将为空。
我尝试使用 onPause
、onStop
、onFinish
而不是 onBackPressed
来管理它的工作,但我得到 data
onActivityResult
始终为空。
解决我的问题的正确方法是什么?
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case android.R.id.home:
onBackPressed();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
在您的详细信息中覆盖此方法activity...和此代码
将此添加到您的 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);
}
这会在硬件反压时自动调用..
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
//your code here
return true;
}
return super.onKeyDown(keyCode, event);
}
您可以这样做以在所有可能的关闭情况下发送结果:
@Override
public void finish() {
Intent data = new Intent();
Intent resultIntent = new Intent();
resultIntent.putExtra("isEdited", isEdited);
setResult(RESULT_OK, resultIntent);
super.finish();
}