2012-02-23 52 views
1

我做這個XML代碼preferenceScreen:複選框PreferenceScreen

<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)應該被禁用,如果它未被選中,它應該被啓用。有什麼我做錯了,或者可能不止一個。

謝謝。


我跟Alex的答案,並具有一些改變我到達的慾望代碼,這裏是糾正代碼:}

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

回答

2

您可能要設置OnPreferenceChangeListenercheck_all偏好並在onPreferenceChaged之內更改pref2OnPreferenceChangeListener

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

是的,這是正確的答案,但我不得不做一些改變。我把它放在正確的代碼上面。再次感謝!! – Txispas 2012-02-23 18:31:44