1

我正在制作一个应用程序,其中有一个“MainActivity.class”,该应用程序有一个“编辑配置文件”按钮,该按钮导致另一个活动,称为“Editprofile.class”。它(MainActivity)还有一个显示字符串(名称)的 TextView。

Editprofile.class 接受来自用户的字符串,并在按下按钮“添加”时,将新字符串更新到数据库,替换以前的字符串。现在,当用户在更新后通过后退按钮返回 MainActivity 时,我希望 TextView 显示新更新的字符串;为此我必须重新启动 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 格式发布这个吗?

4

5 回答 5

3

我建议使用startActivityForResult()和更新你的MainActivityin onActivityResult()

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

于 2012-12-21T20:08:25.423 回答
3

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

它可能需要几行额外的编码,但比每次都更新更有效onResume()。在我看来,它也更干净一些,尽管就性能而言它可能没什么大不了的。

例如,查看Android 开发者网站上的文档。

于 2012-12-21T20:09:08.563 回答
3

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

onResume()这种事情的方法。

于 2012-12-21T20:06:21.750 回答
2

只是:

  • 删除finish()呼叫edit_profile()
  • 删除整个onBackPressed()方法

因为您不需要重新启动活动(现在它将恢复,即:更快、更好、更容易且符合预期)。更新 TextViewonResume()而不是onCreate().

于 2012-12-21T19:56:51.147 回答
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();

}
于 2012-12-21T20:28:32.490 回答