Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于ViewWillDisplay(iOS)的Android SDK等价物? 处境_Android_Textview_Sharedpreferences_Oncreate_Viewwillappear - Fatal编程技术网

用于ViewWillDisplay(iOS)的Android SDK等价物? 处境

用于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

我有一个相当简单的应用程序,有两个使用SharedReferences的“布局”

  • Main.xml
  • Settings.xml
Main有一个textView,它使用SharedReferences中的getString。还有一个打开设置的按钮

设置有一个微调器和一个按钮可保存到SharedReferences


当我在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()的潜在问题并在每次主屏幕出现时运行额外代码。如果使用此选项,还有一件事,请始终在侦听器上保留一个引用,否则它可能无法工作。您仍然需要该引用才能注销它;)