在PreferenceActivity中启用和禁用选项

时间:2013-12-24 13:08:03

标签: android android-settings

我是创建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个选项,Celsius和Fahrenheit,所以如果用户选择Celsius,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);
        }
    }

}

3 个答案:

答案 0 :(得分:17)

此代码可能对您有用。可以作为参考。

首先获取两个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);

答案 1 :(得分:4)

首先,您可以将listUnits列表首选项的默认值设置为celciusFahrenheit,根据这一点,您可以启用 - 禁用您的第二个列表首选项。

现在,通过选择其中任何一个来更改您的偏好时,您可以按照以下步骤进行操作。

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

希望它会有所帮助。如果我的帖子中有任何遗漏,请告诉我。

答案 2 :(得分:0)

由于您的第二个列表是在第一个列表的基础上评估的,您可以做什么

  1. 查看首选项单击第一个列表,获取首选项的值。

  2. 使用此值只需启用/禁用第二个列表。