我需要根据其他应用构建应用。在我的PreferenceScreen中,我有2个ListPreference对象。第二个依赖于第一个和禁用,直到第一个被选中(仍然需要计算出一个)
我想将第一个ListPreference设置为在我的App首次启动时不被选中。我可以通过不分配密钥来实现这一点,但是我能否在没有密钥的情况下检索ListPreference的值?还有另一种方法吗?
如果ListPreferce没有密钥,我可以使用以下代码访问我的PreferenceScreen中的首选项:
ListPreference locationList = (ListPreference)getPreferenceScreen().getRootAdapter().getItem(1);'
我为每个需要引用的Preference做了这个。使用SharedPreference会更好吗?
答案 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()它将无法工作(或者只能工作)。