2012-02-20 2 views
3

У меня есть эта CheckBoxPreferenceCheckBoxPreference зависимость не найдена ошибка

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

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

Однако, я получаю эту ошибку

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

ответ

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

Получите ваш .setDependency() только после того, как setPreferenceScreen() в OnCreate. Он должен работать.

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

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

все еще получаю ту же ошибку! проверьте ответ ниже .. – humansg

+0

слишком плохо, я получил это работает для моего :) – ys126

10

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

+0

Не работайте для меня. Но работает 'peopleg'. –

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"); 
+0

В основном это объяснение ответов ys126. – dbm

-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(); 
} 
Смежные вопросы