3

我需要基于另一个应用程序构建一个应用程序。在我的 PreferenceScreen 中,我有 2 个 ListPreference 对象。第二个取决于第一个并禁用,直到选择第一个(仍然需要弄清楚那个)

我想将第一个 ListPreference 设置为在我的应用程序首次启动时不被选中。我可以通过不分配键来做到这一点,但是我可以在没有键的情况下检索 ListPreference 的值吗?还有另一种方法吗?

如果 ListPreferce 没有键,我可以使用以下代码在我的 PreferenceScreen 中访问 Preferences:

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

我为需要参考的每个首选项都这样做了。使用 SharedPreference 会更好吗?

4

2 回答 2

0

在您的 Preferences XML 中,您可以在第二个中使用以下内容ListPreference

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

然后在您的代码中,您可以添加一个侦听器,以便在选择第一个 listpreference 时,您可以填充第二个 listpreference 并像这样启用它:

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;
    }
});
于 2013-07-13T16:15:04.240 回答
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() 将不起作用(或仅在某些时候起作用)。

于 2018-04-24T06:35:28.993 回答