11

情况

我有一个使用 SharedPreferences 的带有 2 个“布局”的相当简单的应用程序。

  • 主.xml
  • 设置.xml

Main 有一个 textView,它使用 SharedPreferences 中的 getString。还有一个打开设置的按钮。

Settings 有一个微调器和一个用于保存到 SharedPreferences 的按钮。


当我在 onCreate(Bundle savedInstanceState) 中调用 setText() 加载应用程序时,textView 会更新

问题

当我打开设置并更新 SharedPreferences 时,我使用返回按钮返回到 Main。

由于我在 onCreate() 中调用 setText(),因此 textView 不会再次更新,直到我退出应用程序并再次将应用程序打开到 main。

从设置返回后,我需要使用什么方法来更新 textView?

我的请求类似于 iOS 的 viewWillAppear()。

4

4 回答 4

20

onCreate() 仅在活动首次启动时调用一次。如果您想在活动激活时更新文本,您可以使用 onResume() 代替。有关 Activity 生命周期的更多信息,请参见此处

于 2011-12-07T18:58:36.103 回答
1

您还可以创建一个OnSharedPreferenceChangeListener. 将其注册到您Activity.onCreate()PreferenceManager.getDefaultSharedPreferences(this).registerOnSharedPreferenceChangeListener(). 也取消注册Activity.onDestroy()PreferenceManager.getDefaultSharedPreferences(this).unregisterOnSharedPreferenceChangeListener()

于 2011-12-07T19:46:25.663 回答
0

您还可以使用 startActivityForResult 启动 Settings 活动,然后在 Main 活动中实现 onActivityResult 方法:StartingActivities

于 2011-12-07T19:01:21.410 回答
-3

我发现的最佳解决方案是覆盖 onVisibilityChanged

@Override
protected void onVisibilityChanged(View changedView, int visibility){
    super.onVisibilityChanged(changedView, visibility);
    if(visibility==VISIBLE ){
        Log.v("View will appear", "");  
    }
    else{
        Log.v("View will disappear", "");   
    }
}
于 2012-04-13T15:50:10.430 回答