2012-02-20 79 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(); 
}