【问题标题】:Programmatically populating preferences with checkboxes使用复选框以编程方式填充首选项
【发布时间】:2011-09-02 00:44:26
【问题描述】:

在我的设置页面中,我有一个首选项,它获取我想显示为单个复选框首选项的可切换设置列表。

我知道preferences.xml 支持生成首选项列表(查看 wi-fi 设置页面)但ListPreference 只允许您从列表中选择一个。

我一直在寻找如何以编程方式生成首选项,但只设法找到如何更改 XML 中已经存在的首选项的属性。

【问题讨论】:

标签: android preferences


【解决方案1】:

这是一个简短的示例(假设您正在扩展 PreferenceActivity):

public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    PreferenceScreen screen = getPreferenceManager().createPreferenceScreen(this);

    PreferenceCategory category = new PreferenceCategory(this);
    category.setTitle("category name");

    screen.addPreference(category);

    CheckBoxPreference checkBoxPref = new CheckBoxPreference(this);
    checkBoxPref.setTitle("title");
    checkBoxPref.setSummary("summary");
    checkBoxPref.setChecked(true);

    category.addPreference(checkBoxPref);
    setPreferenceScreen(screen);
}

【讨论】:

  • 哇,这太容易了!谢谢! :)
  • 为了让我的 PreferenceFragment 真正使用 PreferenceScreen,我还必须调用 setPreferenceScreen(screen);
  • 如果您希望系统跟踪共享首选项,您还需要设置密钥:checkBoxPref.setKey("your_key");
  • getPreferenceManager() 现已弃用。
【解决方案2】:

以编程方式添加首选项,以及 xml 文件中的其他首选项: 其他解决方案对我不起作用,因为我也有一个带有偏好的 xml。我不确定所有这些调用都是必要的/多余的,但这是可行的。

onCreate() 方法,类扩展 PreferenceActivity:

setContentView(R.layout.preferences);
addPreferencesFromResource(R.xml.preferences);

PreferenceScreen pScreen = getPreferenceManager().createPreferenceScreen(this);     
CheckBoxPreference cb = new CheckBoxPreference(this);
cb.setKey("cb");
cb.setTitle("BLAH");
cb.setOrder(99);        //not working...
pScreen.addPreference(cb);

setPreferenceScreen(pScreen);
addPreferencesFromResource(R.xml.preferences);

旁注:因为我需要生成一个动态复选框列表,所以它最适合在内部 PreferenceScreen 中。所以我在 xml 中创建了这个 PreferenceScreen,然后在其中动态生成了复选框。这样排序就无关紧要了,因为所有“新”动态复选框都在此屏幕内。

【讨论】:

  • 以编程方式混合来自 xml 的首选项非常令人困惑。所有首选项都可以通过编程方式创建,我个人认为编程方式比 xml 方式方便得多
  • 应该如何创建一个“子”-PreferenceScreen?您将此代码显示为创建一个,但它确实使用了主代码并在最顶部添加了一个类别。没有太多可以适应这一点。 ://
猜你喜欢
  • 1970-01-01
  • 2012-06-17
  • 1970-01-01
  • 2020-03-14
  • 1970-01-01
  • 2016-08-13
  • 1970-01-01
  • 1970-01-01
  • 2018-08-19
相关资源
最近更新 更多