具有最多可选选项的ListPreference

时间:2010-01-06 15:27:59

标签: android android-preferences

我希望在我的偏好设置菜单中有一个元素可以执行以下操作:

  • 显示选项列表。
  • 许多是可选择的
  • 要选择的最大选项数量2.

我想到的可能性:

  1. 执行单独的PreferenceScreen并将选项显示为checkBoxes,但我不知道在哪里放置最多2个选项的逻辑。
  2. 扩展DialogPreference并手动完成。
  3. 最好的方法是什么?

2 个答案:

答案 0 :(得分:3)

扩展DialogPreference会让你在外观和感觉上最接近;根据我的经验,Preference课程相当不灵活且不可扩展。

我对PreferenceScreen的记忆太过分了,但我认为它类似。

在我工作的应用中,我们最终使用单独的活动,通过Intent项目从Preference启动。这使我们能够轻松开发需要验证逻辑的偏好屏幕,这比通常情况要复杂一些。

答案 1 :(得分:1)

您可以将最多两个选项的逻辑放在OnSharedPreferenceChangeListener

因此,如果选择了无效组合,您只需在更改时听取所有首选项并更新它们。

所以你的代码将如下所示:

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,String key) {
    //Code to calcuate how many are selected
    int code = numberSelected();

    if (count > 2) {
        sharedPreferences.edit().putBoolean(key,false).commit();
        Toast.makeText(this,"Can't select more than two!",Toast.LENGTH_LONG).show();
    }
}

如果你创建自己的PreferenceActivity来实现OnSharedPreferenceChangeListener,你可以让听众只在需要的时候听这样的事情:

@Override
protected void onResume() {
super.onResume();
    //Register the listener
    getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
}

@Override
protected void onPause() {
    super.onPause();
    // Unregister the listener
    getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
}