如何在按下后退按钮时重新启动活动?

时间:2012-01-20 14:38:50

标签: android android-activity

我将从主要活动转到另一个活动,然后当我按下后退按钮时,我想回到主要活动并重新启动它。 我怎么能这样做?

5 个答案:

答案 0 :(得分:9)

您可以覆盖第二个活动中按下的onBackButton以启动第一个活动。例如:

@Override
public void onBackPressed() {
    startActivity(new Intent(this, FirstActivity.class));
}

答案 1 :(得分:3)

当您在第二个活动中按后退按钮时,Android会自动调用后堆栈上的上一个活动,在您的情况下是您的主要活动。

有关详细信息,请参阅 Tasks and Back Stack的Android文档。

每次使用后退按钮返回活动时,Android都会调用onResume()回调。完成所有“重启”工作。

答案 2 :(得分:3)

在尝试在自定义PreferenceActivity中更改首选项后重新加载我的主要活动以及经过一些试验和错误以及阅读其他回复后,我正在摆弄这个问题,这对我有用:

在我的PreferenceActivity中,我使用onBackPressed()来启动我的MainActivity(MainActivity.class是我要返回的活动:

    @Override
    public void onBackPressed() {
        Intent intent = new Intent(this, MainActivity.class);
        startActivity(intent);
        finish();
    }

在我的MainActivity中,我正在调用我的ReferenceActivity(PreferenceSettings.class是我将通过函数startSettings()通过我的布局XML中的onClick atrribute引用的ReferenceActivity:

    public void startSettings(View view){
        Intent intent = new Intent(this, PreferenceSettings.class);
        startActivity(intent);
        finish();
    }

我使用它来重新启动我的MainActivity,这样它将再次运行onCreate()方法,使用我的PreferenceActivity中的任何更改重新加载(刷新)我的视图。当我启动ReferenceActivity时,这会导致我的MainActivity完成和卸载,允许通过从PreferenceActivity按下的后退按钮重新启动它。然后我通过onCreate()方法刷新显示的值,该方法在创建MainActivity时从我的SharedPreferences加载初始值。

希望这有助于某人!

答案 3 :(得分:2)

您不应该覆盖onBackPressed。下面的方法就像一个魅力,是(imho)最佳实践。

MainActivity执行此操作:

private static int CODE = 1; //declare as FIELD

startActivityForResult(new Intent(MainActivity.this, SecondActivity.class), CODE);

这将监视用户是否已杀死或退出SecondActivity。您可以通过覆盖onActivityResult

中的MainActivity来理解这一点
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
         //SecondActivity closed
         if(requestCode == CODE){
              startActivity(new Intent(MainActivity.this, MainActivity.class)); //reload MainActivity
              finish();
         }
}

答案 4 :(得分:1)

假设当您打开当前活动时没有关闭MainActivity ,那么这应该适合您:

    @Override  
   public boolean onKeyDown(int keyCode, KeyEvent event)  
   {  
       if (keyCode == KeyEvent.KEYCODE_BACK) {
           finish();
           return true;
       }

       return super.onKeyDown(keyCode, event); 
}

OR:

@Override
public void onBackPressed() {
    finish();
 }