Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.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
Android OnSharedPreferenceChangeListener和方向更改_Android_Android Preferences_Preferenceactivity - Fatal编程技术网

Android OnSharedPreferenceChangeListener和方向更改

Android OnSharedPreferenceChangeListener和方向更改,android,android-preferences,preferenceactivity,Android,Android Preferences,Preferenceactivity,我制作了一个自定义的首选项屏幕,通过编程创建了一些首选项 它在某些首选项屏幕内创建一些列表首选项和自定义首选项类别 这些首选项是动态创建的,因为它们的值和可见性相互依赖。例如,您可以选择具有或不具有特定颜色变化(将添加列表首选项)或特定附件(将添加一组复选框首选项)的项目。 此行为通过使用共享首选项ChangeListener实现 现在,若设备在首选项的主屏幕中旋转,一切正常。但若设备在首选项屏幕可见时旋转,它将不会重新创建UI。在我返回主首选项屏幕并再次旋转设备以强制恢复之前,它根本不会修改它

我制作了一个自定义的
首选项屏幕
,通过编程创建了一些首选项

它在某些
首选项屏幕内创建一些
列表首选项
和自定义
首选项类别

这些首选项是动态创建的,因为它们的值和可见性相互依赖。例如,您可以选择具有或不具有特定颜色变化(将添加列表首选项)或特定附件(将添加一组复选框首选项)的项目。 此行为通过使用共享首选项ChangeListener实现

现在,若设备在首选项的主屏幕中旋转,一切正常。但若设备在
首选项屏幕可见时旋转,它将不会重新创建UI。在我返回主首选项屏幕并再次旋转设备以强制恢复之前,它根本不会修改它

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


我已经用安卓4.4在Nexus7上测试过了。请建议如何处理此错误行为。

您可以使用Activity-class的OnConfiguration Changed来检测和跟踪此行为,然后手动调用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) {
     ....
     }
}

但是,
onResume
被调用-它注册了ChangeListener,它也可以“工作”并删除首选项-我只是在屏幕上看不到这些更改。