2012-02-20 77 views
3

我有這個CheckBoxPreferenceCheckBoxPreference依賴未找到錯誤

CheckBoxPreference sendToEmailPref = new CheckBoxPreference(this); 
sendToEmailPref.setTitle("Send To Email"); 
sendToEmailPref.setDependency("emailList"); 

我想設置上的鍵「的emailList」 的emailList是一個自定義生成偏好存儲電子郵件收件人爲String的依賴。

不過,我得到這個錯誤

Caused by: java.lang.IllegalStateException: Dependency not found..... 

回答

1
final CheckBoxPreference sendImageToEmail = (CheckBoxPreference) findPreference("send_image_to_email"); 
listener = new SharedPreferences.OnSharedPreferenceChangeListener() { 
@Override 
public void onSharedPreferenceChanged(
    SharedPreferences sharedPreferences, String key) { 
     if (key.equals("emailList")) { 
      String emails = sharedPreferences 
        .getString("emailList", ""); 
      if (emails.equals("")) { 
       sendImageToEmail.setChecked(false); 

我用OnSharedPreferenceChangeListener做到這一點。

3

讓您.setDependency()只setPreferenceScreen()在你的onCreate後。它應該工作。

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setPreferenceScreen(createPreferenceHierarchy()); 
    getPreferenceScreen().findPreference("_key_of_depend_to_").setDependency("emailList"); 
} 
+0

仍然得到同樣的錯誤!檢查下面的答案.. – humansg 2012-02-24 16:59:48

+0

太糟糕了,我知道它適用於我:) – ys126 2012-02-25 17:48:48

10

在完成調用addPreference後,您應該調用setDependency 它對我很好用!

+0

不要爲我工作。但是'人類'的方式起作用。 – 2014-08-05 19:19:12

1

請確保您在之前添加了「emailList」鍵的首選項,並將依賴項添加到您的CheckBoxPreference。我有類似以下的東西爲我工作(在我的PreferenceFragment)。

Context context = getActivity(); 

PreferenceScreen root = getPreferenceManager.createPreferenceScreen(context); 
setPreferenceScreen(root); 

CustomPreference customPref = new CustomPreference(context); 
customPref.setTitle("My Custom Preference"); 
customPref.setKey("emailList"); 

root.addPreference(customPref); 

CheckBoxPreference sendToEmailPref = new CheckBoxPreference(context); 
sendToEmailPref.setTitle("Send To Email"); 

root.addPreference(sendToEmailPref); 

sendToEmailPref.setDependency("emailList"); 
+0

這基本上是對ys126答案的澄清。 – dbm 2014-07-17 12:49:46

-1

你可以試試下面的代碼: -

private static final String PARENT_CHECKBOX_PREFERENCE = "parent_checkbox_preference"; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     PreferenceScreen root = getPreferenceManager().createPreferenceScreen(this); 
     setPreferenceScreen(root); 
     populatePreferenceHierarchy(root); 
    } 

private void populatePreferenceHierarchy(PreferenceScreen pScreenRoot) { 
     // Preference attributes 
     PreferenceCategory prefAttrsCat = new PreferenceCategory(this); 
     prefAttrsCat.setTitle("preference_attributes"); 
     pScreenRoot.addPreference(prefAttrsCat); 

     // Visual parent toggle preference 
     CheckBoxPreference parentCheckBoxPref = new CheckBoxPreference(this); 
     parentCheckBoxPref.setKey(PARENT_CHECKBOX_PREFERENCE); 
     parentCheckBoxPref.setTitle("title_parent_preference"); 
     parentCheckBoxPref.setSummary("summary_parent_preference"); 
     prefAttrsCat.addPreference(parentCheckBoxPref); 


     // Visual child toggle preference 
     // See res/values/attrs.xml for the <declare-styleable> that defines TogglePrefAttrs. 
     TypedArray typeA = obtainStyledAttributes(R.styleable.TogglePrefAttrs); 
     CheckBoxPreference childCheckBoxPref = new CheckBoxPreference(this); 
     childCheckBoxPref.setKey("child_checkbox_preference"); 
     childCheckBoxPref.setTitle("title_child_preference"); 
     childCheckBoxPref.setSummary("summary_child_preference"); 
     childCheckBoxPref.setLayoutResource(typeA.getResourceId(R.styleable.TogglePrefAttrs_android_preferenceLayoutChild, 0)); 
     prefAttrsCat.addPreference(childCheckBoxPref); 
     childCheckBoxPref.setDependency(PARENT_CHECKBOX_PREFERENCE); 

     typeA.recycle(); 
}