我有FirstActivity
来电:
Intent in = new Intent(this, SecondActivity.class);
startActivity(in);
之后,我在SecondActivity中执行了一些操作,然后使用onBackPressed()
或finish()
返回。
问题是,两种方法都将我转移到FirstActivity
而没有重新创建它。另一方面,如果我按下内置菜单按钮将我移回层次结构,则会重新创建FirstActivity
(因此调用onCreate()
),这在我的情况下是理想的效果。
问题是,我应该在SecondActivity
中调用哪些代码才能关闭此活动以及重新创建FirstActivity
(因此它会调用onCreate()
)
答案 0 :(得分:2)
首先,您应该考虑是否真的希望调用onCreate()
。您可以将需要调用的FirstActivity
代码移至onResume()
而不是onCreate()
。这可能是解决问题的最简单方法。
如果你真的想在onCreate()
再次拨打FirstActivity
,你可以看看你可以给你意图的标志。
Here is a list of available flags然后使用startActivity()
再次启动第一个活动。
答案 1 :(得分:1)
在第一个活动中
Intent in = new Intent(this, SecondActivity.class);
startActivity(in);
finish();
在这里,您正在销毁当前的活动。
来自第二项活动
Intent in = new Intent(this, FirstActivity.class);
startActivity(in);
finish();
每当回到第一个Activity时,只需销毁第二个并重新创建
编辑
覆盖onkeydownmethod()
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
// do something on back.
//here you use intent
return true;
}
return super.onKeyDown(keyCode, event);
}
答案 2 :(得分:1)
您可以使用startActivityForResult()
,当您从第二个活动返回时,请在onActivityResultcode()
处理您需要的内容。但我同意其他人的答案,你应该使用一些Activity生命周期方法。
public static fina int RESULT_CODE = 5;
Intent intent = new Intent(this, SecondActivity.class);
startActivityForResult(intent, 0);
....
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(resultCode == RESULT_CODE ){
//do what you need
}
}
在SecondActivity中只需设置结果代码
@Override
public void onBackPressed() {
setResult(FirstActivity.RESULT_CODE);
this.finish();
}