Ошибка CheckBoxPreference зависимости не найдена - PullRequest
3 голосов
/ 20 февраля 2012

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

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

Я хочу установить его зависимость от ключа "emailList". EmailList - это пользовательская настройка сборки, в которой адресаты электронной почты хранятся в виде строки.Я получаю эту ошибку

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

Ответы [ 6 ]

10 голосов
/ 03 августа 2012

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

3 голосов
/ 23 февраля 2012

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

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

    setPreferenceScreen(createPreferenceHierarchy());
    getPreferenceScreen().findPreference("_key_of_depend_to_").setDependency("emailList");
}
1 голос
/ 17 июля 2014

Убедитесь, что вы добавили предпочтение с помощью ключа "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");
1 голос
/ 24 февраля 2012
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, чтобы сделать это.

0 голосов
/ 17 февраля 2019

вы должны написать sendToEmailPref.setDependency("emailList") после setPreferenceScreen(yourScreen) предположим, я пишу:

 override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
        val context = preferenceManager.context
        val screen = preferenceManager.createPreferenceScreen(context)
        ...

и иметь switchPreference:

val mySwitchPreference = SwitchPreference(context)
mySwitchPreference.key = "my_switch_preference"
screen.addPreference(mySwitchPreference )
...

и у меня есть SeekBarPreference, от которого я хочу зависеть от «mySwitchPreference». если переключатель «ВКЛ», то панель поиска включена, иначе панель поиска отключена:

val mySeekBarPreference = SeekBarPreference(context)
mySeekBarPreference.key = "my_seekbar_preference"
screen.addPreference(mySeekBarPreference)
...



preferenceScreen = screen
mySeekBarPreference.dependency = mySwitchPreference.key

если вы попытаетесь установить зависимость для seekBarPrefernece, перед установкой Экран как PreferenceScreen, он выдает эту ошибку:

java.lang.IllegalStateException: Dependency "my_switch_preference" not found for preference "my_seekbar_preference"
0 голосов
/ 07 апреля 2015

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

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