根据SecondActivity中的更改在First Activity中更新TextView

时间:2014-06-15 18:24:53

标签: android android-intent sharedpreferences onresume

我有两项活动: ActivityOne ActivityTwo

ActivityOne打开ActivityTwo

Intent i = new Intent(ActivityOne .this,ActivityTwo.class);  
startActivity(i);

ActivityTwo在SharedPrefences中更新一些值MyValue。 ActivityOne有一些TextView字段,显示MyValue的值。

关闭ActivityTwo后,我希望ActivityOne立即更新 TextView根据MyValue的新值(在ActivityTwo中更改)。

我试图调用SharedPrefernces并在ActivityOne中的OnResume()函数中更新TextView视图, 但不知怎的,它不会被调用。

有什么想法吗?

谢谢

更多代码:

ActivityTwo更新MyValue:

@Override
protected void onStop() {
    super.onStop();
    SharedPreferences settings = getSharedPreferences(Settings.sharedPrefencesForSettingsName,0);
    SharedPreferences.Editor editor = settings.edit();
    editor.putBoolean("MyValue", unspecified.isChecked());
    editor.commit();
}

ActivityOne更新TextView:

if (settings.getBoolean("MyValue", true)) {
    textViewMine.setText("SomeText");

2 个答案:

答案 0 :(得分:1)

根据Android的Coordinating activities文档,onStop()的{​​{1}}方法在ActivityTwo onResume()之后执行,而且ActivityOne为什么你没有从SharedPreference获得更新的值。

现在要解决此问题,请将这些代码段从onStop()方法移至onPause()方法,如下所示...

@Override
protected void onPause() {
    super.onPause();
    SharedPreferences settings = getSharedPreferences(Settings.sharedPrefencesForSettingsName,0);
    SharedPreferences.Editor editor = settings.edit();
    editor.putBoolean("MyValue", unspecified.isChecked());
    editor.commit();
}

答案 1 :(得分:0)

使用startActivityForResult()代替startActivity()

onActivityResult()将在您返回来电时立即被调用。

请参阅文档中的Getting a Result from an Activity