Ошибка CheckBoxPreference не найдена

У меня есть этот CheckBoxPreference

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

Я хочу установить его зависимость от ключевого «emailList». EmailList – это настраиваемая настройка, которая хранит адресатов электронной почты как String.

Однако, я получаю эту ошибку

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

Вы должны вызвать setDependency после того, как вы закончили вызов addPreference. Это работает для меня хорошо!

Получите ваш .setDependency () сразу после setPreferenceScreen () в вашей onCreate. Он должен работать.

 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setPreferenceScreen(createPreferenceHierarchy()); getPreferenceScreen().findPreference("_key_of_depend_to_").setDependency("emailList"); } 
 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 .

Перед добавлением зависимостей в CheckBoxPreference убедитесь, что вы добавили предпочтение с помощью ключа «emailList». У меня было что-то вроде ниже, работающее для меня (в моем 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"); 

Вы можете попробовать следующий код:

 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(); }