我有一个CheckBoxPreference和两个依赖于CheckBoxPreference的EditTextPreferences(都在xml文件中定义,而三个都在一个PreferenceScreen中)。

我的问题是:当用户分别取消选中并检查Checkboxpreference时,如何隐藏和重新显示这两个EditTextPreferences?

目前,我只能通过向它们添加android:dependency属性来启用/禁用它们。

使用Java或xml的解决方案将不胜感激。 :)

最佳答案

无论如何,我仍然不知道通过xml来执行此操作,而这始终是我的首选。但是这个java解决方案应该可以工作。

CheckBoxPreference chkPref = (CheckBoxPreference)findPreference("myCheckPref");
EditTextPreference editPref1 = (EditTextPreference)findPreference("myEditCheckPref");
PreferenceGroup editTextParent = getParent(editPref1);

chkPref.setOnPreferenceChangeListener(new OnPreferenceChangeListener(){

public boolean onPreferenceChange(Preference pref, Object value)
{
   if(value)
      editTextParent.addPreference(editPref1);
   else
      editTextParent.removePreference(editPref1);

return true;
}

});


由于没有内置的方式来查找父级的父级组,因此您还必须定义以下功能:

private PreferenceGroup getParent(Preference preference)
{
    return getParent(getPreferenceScreen(), preference);
}

private PreferenceGroup getParent(PreferenceGroup root, Preference preference)
{
    for (int i = 0; i < root.getPreferenceCount(); i++)
    {
        Preference p = root.getPreference(i);
        if (p == preference)
          return root;
       if (PreferenceGroup.class.isInstance(p))
       {
        PreferenceGroup parent = getParent((PreferenceGroup)p, preference);
        if (parent != null)
            return parent;
    }
}
  return null;
}

10-08 03:31