2014-02-18 54 views
2

我有一個CheckBoxPreference和兩個EditTextPreferences其是依賴於CheckBoxPreference(所有在XML文件中定義的,並且所有三個一起單個PreferenceScreen內側)。如何在選中Checkbox首選項時隱藏依賴EditTextPreferences?

我的問題是:如何隱藏重新顯示這兩個EditTextPreferences當用戶取消選中檢查Checkboxpreference分別?

目前我只能夠啓用/通過添加機器人禁用他們:依賴屬性給他們。

這樣做的解決方案javaxml將不勝感激。 :)

回答

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; 
} 
+0

你搖滾:)感謝很多人:)我有嘗試類似這樣的事情,無需PreferenceGroup :)雖然我瞭解你的代碼,你能解釋一下爲什麼你需要這個父母和偏好組嗎?如果我添加一個依賴項,那麼依賴節點是另一個節點的子項? – SoulRayder