我正在创建一个应用程序,其中有一个'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格式发布吗?
答案 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()
只需在父活动中添加以下方法,例如MainActivity
和EditProfile
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
}
使用
启动onClick方法上的Activity startActivityForResult(intentName, 0);
你使用/覆盖onStop()方法
@Override
protected void onStop()
{
super.onStop();
}