簡體   English   中英

以編程方式將共享首選項設置為默認值

[英]set shared preference default programmatically

我有一個共享首選項,沒有在xml中定義默認值,因為我想在創建主要活動時以編程方式設置默認值。 有問題的首選項應該是設備語言(如果可以使用該語言),否則應該是第一種可用的語言,其中在相應的xml中將這些語言定義為字符串數組。

我目前在主要活動的onCreate方法中具有以下內容

    SharedPreferences preferences = getSharedPreferences(
            getString(R.string.shared_prefs_key),
            MODE_PRIVATE
    );

    String detailLanguage = preferences.getString(
            getResources().getString(R.string.detail_display_language),
            ""
    );

    if (detailLanguage.isEmpty()) {
        String deviceLanguage = Locale.getDefault().getLanguage();

        String[] availableLanguages = getResources().getStringArray(R.array.pref_entry_values_detail_display_language);
        boolean deviceLanguageSupported = false;
        for (String availableLanguage : availableLanguages) {
            if (deviceLanguage.equals(availableLanguage)) {
                deviceLanguageSupported = true;
                break;
            }
        }

        preferences.edit()
                .putString(
                        getResources()
                                .getString(R.string.detail_display_language),
                        deviceLanguageSupported ? deviceLanguage : availableLanguages[0]
                ).commit();

第一次運行時調試該代碼,它會進入上述if語句並設置首選項,但是首選項在第一次活動中未顯示為首選項(如果我本人隨后選擇了它,從那時起,它就好像被選擇為某物) 。

我想念什么嗎? 我剛接觸Android。 我根據其他一些類似的SO問題嘗試了上述方法。

PreferenceActivityPreferenceFragment從默認首選項文件中讀取首選項。 要訪問這些首選項,您應該使用PreferenceManager.getDefaultSharedPreferences(context)方法。

我猜這是您看不到更改的原因:您將它們寫入getString(R.string.shared_prefs_key)而不是默認值。

嘗試將第一行更改為此:

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);

暫無
暫無

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

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