2011-03-04 95 views
36

我需要在活動啓動時爲ListPreference設置defult值。 我已經試過ListPreference.setDefaultvalue("value");,但是它使列表的默認條目成爲列表的入口。我需要它,因爲我必須檢查一個條件並將默認值設置爲滿足該條件的值,所以我認爲它不能從xml文件完成(使用android:defaultValue如何設置ListPreference的默認值

例如,假設我有這個數組

<string-array name="opts"> 
    <item>red</item> 
    <item>green</item> 
    <item>blue</item> 
</string-array> 

<string-array name="opts_values"> 
    <item>1</item> 
    <item>2</item> 
    <item>3</item> 
</string-array> 

在PreferenceScreen XML:在arrays.xml值

<ListPreference 
    android:title="Colour select" 
    android:summary="Select your favourite" 
    android:key="colour" 
    android:entries="@array/opts" 
    android:entryValues="@array/opts_values" /> 

在活動,我想這樣做:

String mycolour; 
if (something) { 
    mycolour="1"; 
} else { 
    mycolour="2"; 
} 
ListPreference colour = (ListPreference) findPreference ("colour"); 
colour.setDefaultValue(mycolour); 

但它不起作用,因爲它使默認情況下的第一選擇。你能解釋我如何使另一個默認?謝謝。

回答

27

您是否嘗試過:

setValueIndex(int index); 
+35

我不確定這是否是正確的解決方案,因爲setValue或setValueIndex將有效地設置值,即使用戶已經提供了存儲在首選項中的自定義值。對我有用的是 'if(colour.getValue()== null){ colour.setValue(mycolour); }' – mtotschnig 2012-04-10 10:37:39

+0

什麼是'int index'?如果我想設置一個定義的字符串呢? – 2016-11-02 18:07:19

+0

如何檢索存儲在永久存儲器中的最後一個值,該值是爲持久存儲設置的首選項? – 2017-11-25 21:41:46

3

,或者您也可以嘗試colour.setValue(mycolour);

85

你不需要編程處理的ListPreferences默認值。你可以在xml設置文件中做到這一點。下面是一個例子

<string-array name="opts"> 
     <item>red</item> 
     <item>green</item> 
     <item>blue</item> 
    </string-array> 

    <string-array name="opts_values"> 
     <item>1</item> 
     <item>2</item> 
     <item>3</item> 
    </string-array> 


<ListPreference 
        android:title="Colour select" 
        android:summary="Select your favourite" 
        android:key="colour" 
        android:entries="@array/opts" 
        android:entryValues="@array/opts_values" 
        android:defaultValue="2" /> 

這裏我選擇2作爲默認值。記住defaultvalue將是opts_values元素。

+2

如果opts_values是整數數組會怎麼樣?或者這是一個壞主意? – Keith 2015-12-24 06:27:13

+2

這種方法不適合我。 – 2016-09-13 10:18:08

+1

工程就像一個魅力。 – WideFide 2016-10-15 17:30:16

3

只是爲了如果別人有這個問題的記錄:

setValueIndex(int X)是價值@指數X設置爲默認值 - 所以可能你在找什麼

設置此值AFTER您添加了值! (愚蠢的錯誤,但帶了​​我半個小時)

5

對不起我英語不好。

  1. 列表項
  2. 檢索列表檢查值爲空。如果它爲空,則將其設置爲默認值。

代碼:

ListPreference dataPref = (ListPreference) findPreference("keyList"); 

if(dataPref.getValue() == null){ 
    dataPref.setValueIndex(0); //set to index of your deafult value 
} 
2
((ListPreference) findPreference("pref_language")).setValue(Locale 
       .getDefault().getLanguage()); 

setValue()是ListPreference的方法,並setDefaultvalue是偏好的方法

0

其實這是因爲SharedPreferences將堅持您重新構建應用程序之後。 卸載它,然後重試。

1

這是一個老帖子,但這裏的另一種方式來與下面的代碼行設置的默認值ListPreference

PreferenceManager.setDefaultValues(getActivity(), R.xml.preferences, false); 
1

您可以通過使用這樣的

鍵設置默認值
<string-array name="syncFrequency"> 
    <item name="1">Block All Calls</item> 
    <item name="2">Block Black List</item> 
    <item name="3">Block Unknown Calls</item> 
    <item name="4">Allow White List</item> 
    <item name="5">Receive All Calls</item> 
</string-array> 




<string-array name="syncFrequencyValues"> 
    <item name="1">Block_All_Calls</item> 
    <item name="2">Block_Black_List</item> 
    <item name="3">Block_Unknown_Calls</item> 
    <item name="4">Allow_White_List</item> 
    <item name="5">Receive_All_Calls</item> 
</string-array> 



    <ListPreference 
     android:key="prefSyncFrequency" 
     android:entries="@array/syncFrequency" 
     android:summary="%s" 
     android:defaultValue="Block_Black_List" 
     android:entryValues="@array/syncFrequencyValues" 
     android:title="@string/call_block_options" />