2013-12-24 3 views
7

Я - новый творит PreferenceActivity. Мой вопрос: как включить и отключить опцию на экране предпочтений, изменив другие предпочтения?Включить или отключить опцию в PreferenceActivity

Мои prefs.xml:

<ListPreference 
    android:entries="@array/units" 
    android:entryValues="@array/lunits" 
    android:key="listUnits" 
    android:summary="Units schosssing" 
    android:title="Units" android:defaultValue="C"/> 

<ListPreference 
    android:entries="@array/palette" 
    android:entryValues="@array/lpalette" 
    android:key="listpalette" 
    android:summary="Palette schosssing" 
    android:title="Palette" 
    android:defaultValue="1"/> 

В listUnits есть 2 варианта, по Цельсию и по Фаренгейту, так что если пользователь выбирает по Цельсию listpalette должен получить включен, и если пользователь выбирает Fahrenheit, становится отключенным, как я могу это сделать?

Мой настройки активности:

public class SettingsActivity extends PreferenceActivity 
{ 
    @Override 
    protected void onCreate(final Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     getFragmentManager().beginTransaction().replace(android.R.id.content, new MyPreferenceFragment()).commit();    
    } 

    public static class MyPreferenceFragment extends PreferenceFragment 
    { 
     @Override 
     public void onCreate(final Bundle savedInstanceState) 
     { 
      super.onCreate(savedInstanceState); 
      addPreferencesFromResource(R.xml.prefs); 
     } 
    } 

} 

ответ

16

Этот код может быть вам полезен. Может принимать в качестве ссылки.

Сначала возьмите экземпляр обоих ListPreference и примените этот метод.

ListPreference mlistUnits, mlistPalette; 
mlistUnits= (ListPreference)findPreference("listUnits"); 
mlistPalette= (ListPreference)findPreference("listpalette"); 

mlistUnits.setEnable(false); 
mlistPalette.setEnabled(true); 

и использовать ниже у слушателя

OnPreferenceChangeListener listener = new OnPreferenceChangeListener() {  
@Override 
public boolean onPreferenceChange(Preference preference, Object newValue) { 
    // newValue is the value you choose 
    return false; 
} 
}; 

применять слушателю ListPreference

mlistPalette.setOnPreferenceChangeListener(listener); 
+0

я получаю "Метод getPreferenceScreen() от типа PreferenceActivity осуждается" – Dim

+0

сделать его 'mlistUnits = (Preference) findPreference ("listUnits");' –

+0

вы не должны вызывать getPreferenceScreen() в PreferenceActivity, как это Depricated. Рекомендуемый подход заключается в написании кода в PreferenceFragment, где вы можете легко использовать метод findPreference(). –

0

Как ваш второй список оценивается по основным из первого списка, что вы можете сделать

  1. Посмотрите на привилегированную нажмите на первый список, получить значение выбранного предпочтения.

  2. Используя это значение, просто включите/отключите второй список.

4

Во-первых, вы можете установить значение по умолчанию для вашего listUnits listpreference к celcius или Fahrenheit, по этому вы можете позволить сделать -разделите свой второй список.

Теперь, когда вы изменяете свое предпочтение, выбирая кого-нибудь из них, вы можете следовать процедуре ниже.

1) осуществлять OnSharedPreferenceChangeListener в своем классе MyPreferenceFragment и переопределить метод onSharedPreferenceChanged

2) код, как показано ниже в методе

@Override 
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, 
     String key) { 
    // TODO Auto-generated method stub 
    if (key.equals("listUnits")) { 
        final String value = sharedPreferences.getString(key, ""); 
        Preference Pref_cec=findPreference("listpalette"); 
     if (value.equals("celcius")) { 
        wallpaperPref_admin.setEnabled(true); 
        }else{ 
         wallpaperPref_admin.setEnabled(false); 
        } 
      } 
     } 

Надеется, что это поможет. Дайте мне знать, если что-то не хватает в моем посте.

Смежные вопросы