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,它也可以“工作”并删除首选项-我只是在屏幕上看不到这些更改。