PreferenceCategory自动重置行为中奇怪的SwitchPrefererence

时间:2013-01-28 09:42:46

标签: android android-preferences

几天前,我已经为现有的Android应用程序添加了一个新的SwitchPreference。 一切似乎都很好,直到我遇到一个非常奇怪的问题 - 当向上滚动设置屏幕时 - 开关首选项会自动重置!

查看交换机监听器的日志时 - 似乎用户已恢复设置! 此时,我试图找出问题所在,并删除了不必要的代码。

这是简化的代码:

public class NewSettingsActivity extends PreferenceActivity {
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.settings_screen);
    }
}

这是xml:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
  <PreferenceCategory android:title="bugger">
      <SwitchPreference
          android:title="BUGGER"
          android:key="cxyz" />
  </PreferenceCategory>

    <PreferenceCategory android:title="blabla">
      <Preference android:title="some1" android:key="some11" />
      <Preference android:title="some2" android:key="some12" />
      <Preference android:title="some3" android:key="some13" />
      <Preference android:title="some11" android:key="some41" />
      <Preference android:title="some12" android:key="some51" />
      <Preference android:title="some13" android:key="some16" />
      <Preference android:title="some14" android:key="some17" />
      <Preference android:title="some15" android:key="some18" />
      <Preference android:title="some16" android:key="some19" />
      <Preference android:title="some18" android:key="some199" />
  </PreferenceCategory>

  <PreferenceCategory android:title="testtest">
    <SwitchPreference
      android:title="BUGGEE"
      android:key="d" />
  </PreferenceCategory>

</PreferenceScreen>

此时我意识到 - 当SwitchPreference被隐藏在视图下时会被重置,并显示另一个SwitchPreference!

为了调试它,我实现了MySwitchPreference,它扩展了SwitchPreference并记录了所有被调用的公共/受保护方法,但不幸的是(?) - 只是修复了问题! :)

所以我有一个绕道,但这真的很有趣。有没有人遇到过类似的东西?

谢谢!

1 个答案:

答案 0 :(得分:0)

一个answer is available here,它已被标记为Released on the Android bug tracker(已在Lollipop中修复)。

Joe的解决方法是扩展SwitchPreference类并在视图中使用该扩展。我进一步总结了他的解决方法,但上面链接的帖子已经非常简洁。