【问题标题】:Android SDK equivlent for viewWillAppear (iOS)?与 viewWillAppear (iOS) 等效的 Android SDK?
【发布时间】:2011-12-07 18:53:18
【问题描述】:

情况

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

  • Main.xml
  • Settings.xml

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

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


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

问题

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

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

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

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

【问题讨论】:

    标签: android textview sharedpreferences oncreate viewwillappear


    【解决方案1】:

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

    【讨论】:

    • 现在我已经使用了西蒙对 onResume() 的回应。 @Override protected void onResume() { super.onResume(); // 这里的 setText() }
    • 我在提交问题后挖掘时也发现了这个:(onResume() update TextView
    【解决方案2】:

    您也可以创建一个OnSharedPreferenceChangeListener。使用PreferenceManager.getDefaultSharedPreferences(this).registerOnSharedPreferenceChangeListener() 在您的Activity.onCreate() 中注册它。也可以使用PreferenceManager.getDefaultSharedPreferences(this).unregisterOnSharedPreferenceChangeListener()Activity.onDestroy() 中注销它。

    【讨论】:

    • 这听起来也很有趣。我看到每次出现主屏幕时使用 onResume() 和运行额外代码的潜在问题。
    • 如果你使用这个还有一件事,总是在监听器上保留一个引用,否则它可能不起作用。无论如何,您都需要引用才能取消注册它;)
    【解决方案3】:

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

    【讨论】:

    • 我已经在使用带有 Intent 的 startActivityForResult(),那你的方法更好吗?
    • 我不会说它更好。 OnResume 将在您从设置返回时被调用。如果您只在 onActivityResult 方法中进行更新,那么您可以避免不必要地检查/更新 onResume 中的字段。话虽如此,这有点个人喜好。
    • 好的,我会看看性能和其他问题,看看哪种解决方案最好……非常感谢您的帮助。
    【解决方案4】:

    我找到的最佳解决方案是覆盖 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", "");   
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多