将ListPreference设置为默认情况下取消选中

时间:2012-11-29 13:22:45

标签: android-preferences

我需要根据其他应用构建应用。在我的PreferenceScreen中,我有2个ListPreference对象。第二个依赖于第一个和禁用,直到第一个被选中(仍然需要计算出一个)

我想将第一个ListPreference设置为在我的App首次启动时不被选中。我可以通过不分配密钥来实现这一点,但是我能否在没有密钥的情况下检索ListPreference的值?还有另一种方法吗?

如果ListPreferce没有密钥,我可以使用以下代码访问我的PreferenceScreen中的首选项:

ListPreference locationList = (ListPreference)getPreferenceScreen().getRootAdapter().getItem(1);'

我为每个需要引用的Preference做了这个。使用SharedPreference会更好吗?

2 个答案:

答案 0 :(得分:0)

在您的首选项XML中,您可以在第二个ListPreference上使用以下内容:

android:dependency="key_of_first_listpreference"
android:enabled="false"

然后在您的代码中,您可以添加一个侦听器,以便在选择第一个列表首选项时,您可以填充第二个列表首选项并启用它,如下所示:

final PreferenceScreen prefsRoot = (PreferenceScreen)getPreferenceScreen();
final ListPreference lpFirst  = (ListPreference) prefsRoot.findPreference("first_listpref_key");
final ListPreference lpSecond = (ListPreference) prefsRoot.findPreference("second_listpref_key");

lpFirst.setOnPreferenceChangeListener(new OnPreferenceChangeListener(){
    @Override public boolean onPreferenceChange ( Preference preference, Object newValue )
    {
        lpSecond.setEntries(R.array.bg_colors);
        lpSecond.setEntryValues(R.array.bg_color_values);
        lpSecond.setEnabled(true);
        return true;
    }
});

答案 1 :(得分:0)

抱歉这么晚的回答,希望对某人有所帮助。

您无需从ListPreference中删除键,以便默认设置ListPreference。只需使用代码删除首选项值,ListPreference将没有选定的值:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // next 2 lines should be right after onCreate()
    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
    preferences.edit().remove("your_preference_key").commit();

    // all your other code...
}

它应该是commit(),使用apply()它将无法工作(或者只能工作)。