Android 找不到CheckBoxPreference依赖项错误
我有这张支票Android 找不到CheckBoxPreference依赖项错误,android,dependencies,Android,Dependencies,我有这张支票 CheckBoxPreference sendToEmailPref = new CheckBoxPreference(this); sendToEmailPref.setTitle("Send To Email"); sendToEmailPref.setDependency("emailList"); 我想将其依赖项设置为键“emailList” emailList是一个自定义的构建首选项,它将电子邮件收件人存储为字符串 然而,我得到了这个错误 Caused by: java
CheckBoxPreference sendToEmailPref = new CheckBoxPreference(this);
sendToEmailPref.setTitle("Send To Email");
sendToEmailPref.setDependency("emailList");
我想将其依赖项设置为键“emailList”
emailList是一个自定义的构建首选项,它将电子邮件收件人存储为字符串
然而,我得到了这个错误
Caused by: java.lang.IllegalStateException: Dependency not found.....
在onCreate中将.setDependency()设置为紧跟在setPreferenceScreen()之后。它应该会起作用
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setPreferenceScreen(createPreferenceHierarchy());
getPreferenceScreen().findPreference("_key_of_depend_to_").setDependency("emailList");
}
我在SharedPreferenceChangeListener上使用了一个
来执行此操作。您应该在调用完addPreference后调用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();
}
private静态最终字符串PARENT\u CHECKBOX\u PREFERENCE=“PARENT\u CHECKBOX\u PREFERENCE”;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
PreferenceScreen root=getPreferenceManager().createPreferenceScreen(此);
设置首选项屏幕(根);
PopulateReferenceHierarchy(根);
}
私有void PopulateReferenceHierarchy(首选项屏幕pScreenRoot){
//偏好属性
PreferenceCategory prefAttrsCat=新的PreferenceCategory(此);
prefAttrsCat.setTitle(“首选项属性”);
pScreenRoot.addPreference(prefAttrsCat);
//视觉父切换首选项
CheckBoxPreference parentCheckBoxPref=新的CheckBoxPreference(此);
parentCheckBoxPref.setKey(父项复选框首选项);
parentCheckBoxPref.setTitle(“标题\父项\首选项”);
parentCheckBoxPref.setSummary(“总结父项偏好”);
prefAttrsCat.addPreference(parentCheckBoxPref);
//视觉子切换首选项
//请参阅res/values/attrs.xml以了解定义TogglePrefAttrs的方法。
TypedArray typeA=获得的StyledAttributes(R.styleable.TogglePrefAttrs);
CheckBoxPreference childCheckBoxPref=新的CheckBoxPreference(此);
childCheckBoxPref.setKey(“ChildCheckBoxPreference”);
childCheckBoxPref.setTitle(“标题和儿童偏好”);
childCheckBoxPref.setSummary(“summary_child_preference”);
childCheckBoxPref.setLayoutResource(typeA.getResourceId(R.styleable.TogglePrefAttrs_android_preferenceLayoutChild,0));
prefAttrsCat.addPreference(childCheckBoxPref);
childCheckBoxPref.setDependency(父项复选框首选项);
typeA.recycle();
}
您应该在设置首选项屏幕(您的屏幕)
假设我写:
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
val context = preferenceManager.context
val screen = preferenceManager.createPreferenceScreen(context)
...
并有一个选择:
val mySwitchPreference = SwitchPreference(context)
mySwitchPreference.key = "my_switch_preference"
screen.addPreference(mySwitchPreference )
...
还有一个seekbarp引用,我想依赖于“mySwitchPreference”。
如果开关为“ON”,则启用seekbar,否则禁用seekbar:
val mySeekBarPreference = SeekBarPreference(context)
mySeekBarPreference.key = "my_seekbar_preference"
screen.addPreference(mySeekBarPreference)
...
preferenceScreen = screen
mySeekBarPreference.dependency = mySwitchPreference.key
如果您确实尝试设置seekBarPrefernece的依赖项,请在设置之前
屏幕作为首选项屏幕,它会显示以下错误:
java.lang.IllegalStateException: Dependency "my_switch_preference" not found for preference "my_seekbar_preference"
这基本上是对ys126答案的澄清。
val mySeekBarPreference = SeekBarPreference(context)
mySeekBarPreference.key = "my_seekbar_preference"
screen.addPreference(mySeekBarPreference)
...
preferenceScreen = screen
mySeekBarPreference.dependency = mySwitchPreference.key
java.lang.IllegalStateException: Dependency "my_switch_preference" not found for preference "my_seekbar_preference"