找不到CheckBoxPreference依赖项错误

时间:2012-02-20 07:03:03

标签: android dependencies

我有这个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 个答案:

答案 0 :(得分:10)

调完addPreference后应该调用setDependency 它对我很有用!

答案 1 :(得分:3)

将你的.setDependency()放在onCreate中的setPreferenceScreen()之后。它应该工作。

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

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

答案 2 :(得分: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 :(得分: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");

答案 4 :(得分:0)

您应在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”。 如果开关为“ ON”,则启用搜索栏,否则禁用搜索栏:

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"

答案 5 :(得分:-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();
}