Android onBackPressed - 强制父onCreate

时间:2015-03-30 14:23:16

标签: android android-activity

我有FirstActivity来电:

Intent in = new Intent(this, SecondActivity.class);
startActivity(in);

之后,我在SecondActivity中执行了一些操作,然后使用onBackPressed()finish()返回。

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

问题是,我应该在SecondActivity中调用哪些代码才能关闭此活动以及重新创建FirstActivity(因此它会调用onCreate()

3 个答案:

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