用于ViewWillDisplay(iOS)的Android SDK等价物? 处境
我有一个相当简单的应用程序,有两个使用SharedReferences的“布局”用于ViewWillDisplay(iOS)的Android SDK等价物? 处境,android,textview,sharedpreferences,oncreate,viewwillappear,Android,Textview,Sharedpreferences,Oncreate,Viewwillappear,我有一个相当简单的应用程序,有两个使用SharedReferences的“布局” Main.xml Settings.xml Main有一个textView,它使用SharedReferences中的getString。还有一个打开设置的按钮 设置有一个微调器和一个按钮可保存到SharedReferences 当我在onCreate(Bundle savedInstanceState)中调用setText()时,应用程序加载时,textView会得到更新 问题 当我打开设置并更新Share
- Main.xml
- Settings.xml
当我在onCreate(Bundle savedInstanceState)中调用setText()时,应用程序加载时,textView会得到更新 问题 当我打开设置并更新SharedReferences时,我使用Back按钮返回Main 由于我在onCreate()内调用setText(),因此在我退出应用程序并再次打开应用程序到main之前,textView不会再次更新 从设置返回后,我需要使用什么方法更新textView
我的请求类似于iOS的ViewWillAspect()。onCreate()仅在活动首次启动时调用一次。如果要在活动处于活动状态时更新文本,可以改用onResume()。可以找到有关活动生命周期的更多信息。您也可以使用startActivityForResult启动设置活动,然后在主活动中实现onActivityResult方法:您还可以创建一个。使用
首选项管理器在活动中注册它。onCreate()
。GetDefaultSharedReferences(this)。RegisterOnSharedReferenceChangeListener()
。另外,使用PreferenceManager.GetDefaultSharedReferences(this)在Activity.onDestroy()
中注销它。注销共享PreferenceChangeListener()我找到的最佳解决方案是重写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", "");
}
}
目前,我已将Simon的Response与onResume()一起使用@重写受保护的void onResume(){super.onResume();//setText()here}我在提交问题后四处搜索时也发现了这一点:(我使用的是startActivityForResult())如果已经有了意图,那么你的方法更好吗?我不会说它更好。OnResume将在其他时间被调用,而不仅仅是在你从设置返回时。如果你只在onActivityResult方法中进行更新,那么你可以避免不必要地检查/更新OnResume中的字段。也就是说,这有点像个人偏好ce call。好的,我会看看性能和其他问题,看看哪种解决方案是最好的……我非常感谢您的帮助。这听起来也很有趣。我看到了使用onResume()的潜在问题并在每次主屏幕出现时运行额外代码。如果使用此选项,还有一件事,请始终在侦听器上保留一个引用,否则它可能无法工作。您仍然需要该引用才能注销它;)