我有一个相当简单的应用程序,使用SharedPreferences有两个“布局”。
Main有一个textView,它使用来自SharedPreferences的getString。还有一个用于打开设置的按钮。
设置有一个微调器和一个保存到SharedPreferences的按钮。
当我在onCreate(Bundle savedInstanceState)中调用setText()时,当应用程序加载时,textView会更新
当我打开“设置”并更新SharedPreferences时,我使用“后退”按钮返回主页。
由于我在onCreate()中调用setText(),因此在退出应用程序并再次将应用程序打开到main之前,textView不会再次更新。
从“设置”返回后,我需要使用哪种方法来更新textView?
我的请求类似于iOS的viewWillAppear()。
答案 0 :(得分:19)
onCreate()仅在活动首次启动时调用一次。如果要在活动变为活动状态时更新文本,则可以使用onResume()。可以在here找到有关活动生命周期的更多信息。
答案 1 :(得分:1)
您还可以创建OnSharedPreferenceChangeListener
。使用Activity.onCreate()
在PreferenceManager.getDefaultSharedPreferences(this).registerOnSharedPreferenceChangeListener()
注册。同时在Activity.onDestroy()
中使用PreferenceManager.getDefaultSharedPreferences(this).unregisterOnSharedPreferenceChangeListener()
取消注册。
答案 2 :(得分:0)
您还可以使用startActivityForResult启动“设置”活动,然后在主要活动中实施onActivityResult方法:StartingActivities
答案 3 :(得分:-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", "");
}
}