CheckBox PreferenceScreen - PullRequest
       8

CheckBox PreferenceScreen

1 голос
/ 23 февраля 2012

Я делаю preferenceScreen с этим XML-кодом:

<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-код:

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

}

Что я хотел бы сделать, если флажок установлен, то pref2 (preferencecategory2) должен быть отключен, а если он не отмечен, он должен быть включен. Есть что-то, что я делаю не так, или, может быть, больше, чем один.

Спасибо.


Я последовал ответу Алекса и с некоторыми изменениями прибыл в код желания, вот исправленный код:

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

}

1 Ответ

2 голосов
/ 23 февраля 2012

Вы можете установить OnPreferenceChangeListener для предпочтения check_all и изменить pref2 внутри onPreferenceChaged этого OnPreferenceChangeListener

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