![](/img/trans.png)
[英]Cant set string default value for ListPreference android preferencescreen
[英]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);
對不起我的英語不好。
代碼:
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.xml
在data/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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.