Txispas
Txispas

Reputation: 159

CheckBox PreferenceScreen

I am doing a preferenceScreen with this xml code:

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" android:orderingFromXml="true">
<PreferenceCategory 
       android:key="pref1" 
       android:title="Search All">
    <CheckBoxPreference 
          android:key="check_all" 
          android:title="Check"/>
</PreferenceCategory>
<PreferenceCategory 
       android:title="Specific Search" 
       android:key="pref2">
    <ListPreference 
          android:title="Food" 
          android:key="opcion1"
          android:dialogTitle="Escoge Categoria"
          android:entryValues="@array/codigoCateg" 
          android:entries="@array/categorias" 
          android:negativeButtonText="Cancel"/>
    <ListPreference android:title="Dificultad"/>
    <ListPreference android:title="Otras"/>
</PreferenceCategory>

Java code:

public class OpcionesBusqueda extends PreferenceActivity {

boolean CheckBoxPreference;
private PreferenceCategory Pref2;


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.video_search);

    Pref2=(PreferenceCategory)findPreference("pref2");

    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());

    CheckBoxPreference = prefs.getBoolean("check_all", true);

    if(CheckBoxPreference==true){
        Pref2.setEnabled(false);
    }
    else{
        Pref2.setEnabled(true);
    }
}

}

What I would like to do is if the checkbox is checked then the pref2 (preferencecategory2) should be disabled and if it is unchecked, it should be enabled. There is something that I'm doing wrong, or maybe more than one.

Thanks.


I followed Alex's answer and with some changes I arrived to the desire code, here is the code corrected:

public class OpcionesBusqueda extends PreferenceActivity {

private CheckBoxPreference Check;
private PreferenceCategory Pref2;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.video_search);

    Check=(CheckBoxPreference)findPreference("check_all");
    Pref2=(PreferenceCategory)findPreference("pref2");

    Check.setOnPreferenceChangeListener(new CheckBoxPreference.OnPreferenceChangeListener() {
        public boolean onPreferenceChange(final Preference preference, final Object newValue) {
                Pref2.setEnabled((Boolean)newValue == false);
                return true;
        }
    });        

}

Upvotes: 1

Views: 3448

Answers (1)

Alexander
Alexander

Reputation: 48272

You may want to set OnPreferenceChangeListener for the check_all preference and change pref2 inside onPreferenceChaged of that OnPreferenceChangeListener

CheckBoxPreference.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
     boolean onPreferenceChange(Preference preference, Object newValue) {
          Pref2.setEnabled((Boolean)newValue == false); 
     }
}

Upvotes: 2

Related Questions