Android OnSharedPreferenceChangeListener和方向更改

时间:2014-01-20 20:49:46

标签: android android-preferences preferenceactivity

我制作了一个自定义PreferenceScreen,以编程方式创建了一些偏好。

它会在某些ListPreference内创建一些PreferenceCategory和一个自定义PreferenceScreen

这些首选项是动态创建的,因为它们的值和可见性取决于彼此的值。例如。您可以选择可能具有或不具有某些颜色变化(将添加列表首选项)或某些附件(将添加一组复选框首选项)的项目。 此行为是使用OnSharedPreferenceChangeListener实现的。

现在,如果设备在偏好设置的主屏幕中旋转,一切正常。但是,如果在PreferenceScreen可见时旋转设备,则不会重新创建UI。在我返回主偏好设置屏幕并再次旋转设备以强制onResume之前,它根本不会修改它。

这里最奇怪的部分是,在子PreferenceScreen内旋转时,所有事件都按预期工作 - 我看到更改侦听器启动,它成功找到必要的PreferenceScreen并重新创建其中的所有首选项。但是没有任何视觉上的变化 - 这个PreferenceScreen的UI不会得到更新。

我已经在Android 4.4的Nexus7上测试了这个。请告知如何处理这种不当行为。

1 个答案:

答案 0 :(得分:0)

您可以使用Activity类的onConfigurationChanged来检测和跟踪此行为,然后手动调用onResume。

@Override
   public void onConfigurationChanged(Configuration newConfig) {
      super.onConfigurationChanged(newConfig);

      // Checks the orientation of the screen
     if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
     ....
     } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
     ....
     }
}