选中Checkboxpreference时如何隐藏依赖的Edittextpreferences?

时间:2014-02-18 04:11:51

标签: android android-layout

我有一个 CheckBoxPreference 和两个 EditTextPreferences ,它们依赖于 CheckBoxPreference (全部在xml文件中定义,所有三个在一起单个 PreferenceScreen )。

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

目前我只能通过添加 android:dependency 属性来启用/禁用

java xml 中的解决方案将不胜感激。 :)

1 个答案:

答案 0 :(得分:1)

我不知道无论如何要通过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;
}