我有这个CheckBoxPreference
CheckBoxPreference sendToEmailPref = new CheckBoxPreference(this);
sendToEmailPref.setTitle("Send To Email");
sendToEmailPref.setDependency("emailList");
我想设置它对一个键“emailList”的依赖 emailList是一个自定义构建首选项,它将电子邮件收件人存储为字符串。
但是,我收到此错误
Caused by: java.lang.IllegalStateException: Dependency not found.....
答案 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();
}