按返回按钮重新启动上一个活动

时间:2012-12-21 19:52:12

标签: java android

我正在创建一个应用程序,其中有一个'MainActivity.class',它有一个“编辑个人资料”按钮,可以导致另一个名为'Editprofile.class'的活动。它(MainActivity)还有一个显示字符串(名称)的TextView。

Editprofile.class接受来自用户的字符串,按下“add”按钮后,新的String将更新到数据库,替换之前的字符串。现在,在更新之后,用户通过后退按钮返回MainActivity,我希望TextView显示新更新的String;我必须重新启动MainActivity。

我已经通过使用finish()函数实现了这一点,当用户按下“编辑配置文件”按钮时,当用户在Editprofile活动期间按下后退按钮时,MainActivity将通过onBackPress()方法重新启动。

启动'Editprofile.class'的意图代码:

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

返回'MainActivity'的代码:

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

我已经设法得到了我想要的结果,但如果有人能告诉我它是否是最有效的方法,我将不胜感激。

我应该以Q / A格式发布吗?

5 个答案:

答案 0 :(得分:3)

  

但我也想'刷新'MainActivity,以便在返回时显示新更新的名称;

这种方法有onResume()方法。

答案 1 :(得分:3)

我建议您使用startActivityForResult()并更新MainActivity中的onActivityResult()

(无需检查onResume()中的更新,因为此方法由许多其他实例调用,而非仅从Editprofile返回。)

答案 2 :(得分:3)

@Mattias答案的替代方法是使用Editprofile启动startActivityForResult(...)。然后,该活动可以返回指示用户是否实际编辑了他/她的个人资料的结果,您可以在onActivityResult(...) MainActivity中捕获该个人资料。仅当配置文件发生更改时,TextView才需要更新。

可能需要几行额外的编码,但比每次onResume()被点击更新的效率稍高一些。在我看来它也有点清洁,虽然在性能方面它可能不会是一个大问题。

例如,请查看Android开发者网站上的documentation

答案 3 :(得分:2)

只需:

  • 移除finish()
  • 中的edit_profile()来电
  • 删除整个onBackPressed()方法

因为您不需要重新启动活动(现在它将恢复,这是:更快,更好,更容易和按预期)。更新onResume()中的TextView,而不是onCreate()

答案 4 :(得分:1)

不要在程序的任何地方使用/覆盖onBackPressed()

只需在父活动中添加以下方法,例如MainActivityEditProfile

在MainActivity.java

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
}

使用

启动onClick方法上的Activity
    startActivityForResult(intentName, 0);

在EditProfile.java

你使用/覆盖onStop()方法

    @Override
protected void onStop()
{
    super.onStop();

}