我有一个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;
}