我有一个 CheckBoxPreference 和两个 EditTextPreferences ,它们依赖于 CheckBoxPreference (全部在xml文件中定义,所有三个在一起单个 PreferenceScreen )。
我的问题是:当用户取消选中时,如何隐藏并重新显示这两个 EditTextPreferences strong>检查 Checkboxpreference 分别?
目前我只能通过添加 android:dependency 属性来启用/禁用。
java 或 xml 中的解决方案将不胜感激。 :)
答案 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;
}