簡體   English   中英

如何設置 ListPreference 的默認值

[英]How to set the Default Value of a ListPreference

我需要在 Activity 啟動時為 ListPreference 設置默認值。 我試過ListPreference.setDefaultvalue("value"); 但它使列表的第一個條目成為默認值。 我需要它,因為我必須檢查一個條件並將滿足該條件的值設置為默認值,所以我認為它不能從 xml 文件中完成(使用android:defaultValue

例如,假設我在 arrays.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>

在 PreferenceScreen 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);

但它不起作用,因為它將第一選擇設為默認值。 你能解釋一下如何將另一個設為默認值嗎? 謝謝。

您不需要以編程方式處理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元素。

你有沒有嘗試過:

setValueIndex(int index);

對不起我的英語不好。

  1. 項目清單
  2. 檢索列表檢查值是否為空。 如果為空,則設置為默認值。

代碼:

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

if(dataPref.getValue() == null){
    dataPref.setValueIndex(0); //set to index of your deafult value
}

您可以使用這樣的鍵來設置默認值

<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" />

或者你也可以試試colour.setValue(mycolour);

如果其他人有這個問題,僅供記錄:

setValueIndex(int X)正在將值setValueIndex(int X)設置為默認值 - 所以可能是你正在尋找的

添加值設置此值! (愚蠢的錯誤,但花了我半小時)

((ListPreference) findPreference("pref_language")).setValue(Locale
                .getDefault().getLanguage());

setValue()是 ListPreference 的方法, setDefaultvalue是 Preference 的方法

實際上這是因為在您重新構建應用程序后 SharedPreferences 將持續存在。 卸載它並重試。

這是一篇舊帖子,但這是使用以下代碼行設置ListPreference的默認值的另一種方法:

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

使用列表標簽中的 xml 屬性android:defaultValue="<VALUE>"來設置默認值。

注意: <VALUE>是實際值,而不是字符串數組的索引。

如果仍然無法正常工作,請嘗試以下步驟。

  • 清除應用程序數據。
  • 卸載並重新安裝應用程序
  • 檢查列表首選項,您將看到選擇的默認值

奇怪,我知道,但它在我的情況下有效。

如果您使用的是 Android Jetpack Preference,在 Kotlin 中稱為androidx.preference:preference-ktx:1.1.1 ,您可以使用:

app:defaultValue="<Value_in_string-array_with_values>"

另外: defaultValue不是索引號,是 values 數組中的實際值。

我還建議使用字符串資源作為默認值並清除數據、卸載應用程序或刪除文件:

  • <package_name_in_app_manifest>_preferences.xmldata/data/shared_prefs/<package_name_in_app_manifest>中。 <package_name_in_app_manifest>替換為真實姓名,如com.example.yourapp

我遇到了同樣的問題,並且defaultValue沒有更新,因為它已經有一個錯誤的默認值“true”。 通過使用 Android Studio 文件資源管理器並刪除文件來解決它。

這是我的解決方案示例:

res/xml/root_preferences.xml

<ListPreference
    
    app:key="mic"
    
    app:title="@string/select_mic_title"
 
    app:useSimpleSummaryProvider="true"
   
    app:entries="@array/mic_entries"

    app:entryValues="@array/mic_values"
    app:defaultValue="@string/default_mic"
    />

res/values/arrays

<!-- Mic Preference -->

<string-array name="mic_entries">

    <item>@string/default_mic</item>

    <item>Headband</item>

</string-array>


<string-array name="mic_values">

    <item>@string/default_mic</item>

    <item>Headband</item>

</string-array>

res/strings.xml

<string name="default_mic">Integrated</string>

結果:使用字符串資源@string/default_mic 給出的默認列表值“Integrated”設置片段

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM