在语言更改时保留 ListPreference 值

问题描述

如何在语言更改时保留 ListPreference 的值,知道它在首选项中记录了翻译后的字符串值?

  1. 打开英文应用程序,选择一个值。这是保存在数据/数据中的首选项.xml 中的内容:<string name="list_preference">Home</string>

  2. 更改语言。例如,在法语中,字符串是“Travail”,但没有任何内容执行自动对应。摘要变为“未设置”,我们无法再访问此首选项的预期值。

似乎要么我们遗漏了什么,要么存在重大设计缺陷。

现在只是示例代码,但如果您需要详细信息:

class SettingsFragment : PreferenceFragmentCompat() {
    override fun onCreatePreferences(savedInstanceState: Bundle?,rootKey: String?) {
        setPreferencesFromResource(R.xml.preferences,rootKey)

        val listPreference: ListPreference? = findPreference(getString(R.string.pref_listExample_string))
        listPreference?.summaryProvider = ListPreference.SimpleSummaryProvider.getInstance()
    }
}

首选项.xml

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <ListPreference
        android:defaultValue=""
        android:entries="@android:array/emailAddressTypes"
        android:entryValues="@android:array/emailAddressTypes"
        android:key="@string/pref_listExample_string"
        android:title="List preference (to be localized)" />
</PreferenceScreen>

preference_ids.xml

<resources>
    <string name="pref_listExample_string">listExample</string>
</resources>

访问值

// This is a problem : how can we access an unlocalized value of the string representation?
val sharedPrefs : SharedPreferences = PreferenceManager.getDefaultSharedPreferences(this)
Log.i(TAG,sharedPrefs.getString(getString(R.string.pref_listExample_string),""))

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)