2012-02-20 6 views
3

を見つけていない私は、このCheckBoxPreferenceCheckBoxPreference依存エラー

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

を持って、私はキーにその依存関係を設定したい「emailList」 emailListは、Stringとして電子メールの受取を保存するカスタムビルド好みです。

しかし、私はこのエラーを取得しています

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

あなたはaddPreferenceの呼び出しを完了した後にsetDependencyを呼び出す必要があります それは私のためにうまくいきます!

+0

私のために働かないでください。しかし、「人間」の道が働く。 –

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