如何将ListPreference初始化为其值之一


71

我试图将defaultValue设置为ListPreference项。

这是我的preference.xml文件的示例:

<ListPreference android:key="notification_delay"
    android:title="@string/settings_push_delay"
    android:entries="@array/settings_push_delay_human_value"
    android:entryValues="@array/settings_push_delay_phone_value"
    android:defaultValue="????">
</ListPreference>

两个数组:

<string-array name="settings_push_delay_human_value">
    <item>every 5 minutes</item>
    <item>every 10 minutes</item>
    <item>every 15 minutes</item>
</string-array>
<string-array
    name="settings_push_delay_phone_value">
    <item>300</item>
    <item>600</item>
    <item>900</item>
</string-array>

当我进入首选项活动时,没有选择ListPreference的任何项目。我试图在“ android:defaultValue”文件中设置一个像1这样的int值,以选择“ 10分钟”,但是它不起作用。

<ListPreference android:key="notification_delay"
    android:title="@string/settings_push_delay"
    android:entries="@array/settings_push_delay_human_value"
    android:entryValues="@array/settings_push_delay_phone_value"
    android:defaultValue="1">
</ListPreference>

任何想法?

Answers:


91

您需要指定。因此,要默认选择第一个条目defaultValue="300",请在示例中指定。


这很好用,以编程方式我有300的价值。但实际上,我想要的是默认情况下选择“以图形方式”选择ListPreference的行之一。
ol_v_er 2010年

1
在我的应用程序中,它的确满足以下条件:首次启动该应用程序时,在首选项列表中选择了为“ defaultValue”指定的值。别为什么这不适合您...
sven

抱歉,是我的错。我在默认值和数组中的值之间犯了一个错误。在我尝试过的所有手机上都可以正常工作。谢谢。
ol_v_er 2010年

8
次要方面,我发现清理程序将默认值提取为字符串,然后引用该字符串。
查米船长,2011年

1
是否可以在数组中指定索引?像其中的第一项...?
TomerZ 2014年

19

碰巧处于相同的情况。指定一致的默认值。但是没有选择图形。我清除了应用程序数据。然后它按预期工作。因此,在开发时添加新的XxxPreference项目时,清除可能会很有用。


4
我也是。我清除了应用程序数据,一切正常!
塞拉芬

11

除了Sven的答案之外,您还必须在开始活动中调用setDefaultValues()方法。这将设置所有默认值一次。

public class MainActivity extends Activity {
  protected void onCreate(final Bundle savedInstanceState) {
  // Set all default values once for this application
  // This must be done in the 'Main' first activity
  PreferenceManager.setDefaultValues(this, R.xml.preferences, false);
  ...
  }
}

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.