2012-02-20 6 views
3

Je cette CheckBoxPreferencela dépendance CheckBoxPreference erreur non trouvée

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

Je veux mettre sa dépendance sur une clé « Emaillist » Emaillist est une préférence de génération personnalisée qui stocke les destinataires de courrier électronique en tant que chaîne.

Cependant, je reçois cette erreur

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

Répondre

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

J'ai utilisé un OnSharedPreferenceChangeListener pour le faire.

3

Obtenez votre .setDependency() juste après setPreferenceScreen() dans votre onCreate. Ça devrait marcher.

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

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

obtenir toujours la même erreur! vérifier la réponse ci-dessous .. – humansg

+0

trop mauvais, je l'ai eu fonctionne pour le mien :) – ys126

10

vous devriez appeler setDependency après que vous ayez fini d'appeler addPreference Ça marche bien pour moi!

+0

Ne fonctionne pas pour moi. Mais la façon 'humansg' fonctionne. –

1

Assurez-vous que vous avez ajouté une préférence avec une clé "emailList" avant vous ajoutez la dépendance à votre CheckBoxPreference. J'ai eu quelque chose comme ci-dessous qui travaille pour moi (dans mon 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"); 
+0

Ceci est essentiellement une clarification des réponses de ys126. – dbm

-1

Vous pouvez le code suivant: -

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