Android onBackPressed-强制父项onCreate

Android onBackPressed-强制父项onCreate,android,android-activity,Android,Android Activity,我有FirstActivity调用: Intent in = new Intent(this, SecondActivity.class); startActivity(in); 之后,我在SecondActivity中执行一些操作,然后使用onBackPressed()或finish()返回 问题是,这两种方法都将我移动到FirstActivity,而不重新创建它。另一方面,如果我按下将我移回层次结构的内置菜单按钮,FirstActivity将重新创建(因此调用onCreate()),这在我

我有
FirstActivity
调用:

Intent in = new Intent(this, SecondActivity.class);
startActivity(in);
之后,我在SecondActivity中执行一些操作,然后使用
onBackPressed()
finish()
返回

问题是,这两种方法都将我移动到
FirstActivity
,而不重新创建它。另一方面,如果我按下将我移回层次结构的内置菜单按钮,
FirstActivity
将重新创建(因此调用
onCreate()
),这在我的情况下是理想的效果

问题是,我应该在
SecondActivity
中调用什么代码才能关闭此活动并重新创建
FirstActivity
(因此它在第一个活动中调用
onCreate()

Intent in = new Intent(this, SecondActivity.class);
startActivity(in);
finish();
在这里,您正在销毁当前活动

从第二个活动开始

Intent in = new Intent(this, FirstActivity.class);
startActivity(in);
finish();
每当回到第一个活动时,只需销毁第二个并重新创建

编辑 重写onkeydownmethod()

在第一个活动中

Intent in = new Intent(this, SecondActivity.class);
startActivity(in);
finish();
在这里,您正在销毁当前活动

从第二个活动开始

Intent in = new Intent(this, FirstActivity.class);
startActivity(in);
finish();
每当回到第一个活动时,只需销毁第二个并重新创建

编辑 重写onkeydownmethod()


首先,您应该考虑是否真的希望调用
onCreate()
。您可以移动需要调用到
onResume()
而不是
onCreate()
FirstActivity
的代码。这可能是解决你问题的最简单方法

如果您真的想在
FirstActivity
中再次调用
onCreate()
,您可以查看您可以为您的意图提供的标志


然后使用
startActivity()

再次启动第一个活动首先,您应该考虑是否确实希望调用
onCreate()
。您可以移动需要调用到
onResume()
而不是
onCreate()
FirstActivity
的代码。这可能是解决你问题的最简单方法

如果您真的想在
FirstActivity
中再次调用
onCreate()
,您可以查看您可以为您的意图提供的标志


然后使用
startActivity()

再次启动第一个活动,您可以使用
startActivityForResult()
,当您从第二个活动返回时,在
onActivityResultcode()
中处理它,并执行您需要的操作。但我同意其他人的回答,即您应该使用一些活动生命周期方法

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();
}

您可以使用
startActivityForResult()
,当您从第二个活动返回时,在
onActivityResultcode()
中处理它,做您需要的事情。但我同意其他人的回答,即您应该使用一些活动生命周期方法

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();
}

为什么要重新创建FirstActivity?有什么特殊需要吗?否则,您也可以重写其他一些生命周期方法,如onStart或onResume,以便在从SecondActivity返回时执行必要的初始化。在onCreate中初始化FirstActivity后,它将保持静态。SecondActivity对FirstActivity显示的数据执行重大更改,因此我希望以最少的代码量重新生成FirstActivity(我不关心效率)“如果我按内置菜单按钮将我移回层次结构,则会重新创建FirstActivity”只有在您在
SecondActivity
期间将其销毁时,才会出现这种情况。似乎是你设计中的一个缺陷。我一直在问代码,而不是设计。这就是stackoverflow的意义,不是吗?为什么要重新创建FirstActivity?有什么特殊需要吗?否则,您也可以重写其他一些生命周期方法,如onStart或onResume,以便在从SecondActivity返回时执行必要的初始化。在onCreate中初始化FirstActivity后,它将保持静态。SecondActivity对FirstActivity显示的数据执行重大更改,因此我希望以最少的代码量重新生成FirstActivity(我不关心效率)“如果我按内置菜单按钮将我移回层次结构,则会重新创建FirstActivity”只有在您在
SecondActivity
期间将其销毁时,才会出现这种情况。似乎是你设计中的一个缺陷。我一直在问代码,而不是设计。这就是stackoverflow的意义,不是吗?这一个很接近,但一旦我完成FirstActivity,我就无法从SecondActivity的内置菜单后退按钮返回到它。你可以覆盖onkeyDown()。这一个是关闭的,但一旦我完成FirstActivity,我就无法从SecondActivity的内置菜单后退按钮返回到它。你可以覆盖onkeyDown().我见过这个解决方案,但代码太多了。onResume()非常适合我。我见过这个解决方案,但代码太多了。onResume()对我来说太完美了。你的标志列表太迟钝了……我讨厌人们只给出链接而不解释什么。似乎url改变了。我将其编辑为直接指向列表。我相信谷歌的解释比我能提供的要好。如果你认为我的答案没有用,请随意投票否决。你的旗帜列表太迟钝了……我讨厌人们只给出链接而不解释什么。似乎url改变了。我将其编辑为直接指向列表。我相信谷歌的解释比我能提供的要好。如果你认为我的答案没有用,请随意投反对票。