首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android ListPreference

Android ListPreference
EN

Stack Overflow用户
提问于 2015-06-04 23:48:54
回答 1查看 2.1K关注 0票数 1

我正在为游戏实现运行时语言的更改。将数据保存在首选项中。一切都很好,除了一件事:

在首选项中,我用ListPreference指定语言。如果我改变了语言--它在应用程序中的任何地方都有很好的变化,但是如果我再次尝试改变语言,ListPreference指针总是放在英语(默认值)上,而不是当前语言。再说一次:默认值是英语。我把它换成法语。我的应用程序语言变成了法语,但当我现在进入ListPreference时,指针仍然在英语上(如果英语是当前的话),但必须是在法语上。

这是我的代码:

preferences.xml

代码语言:javascript
复制
    PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >

        <PreferenceCategory
           <ListPreference
                android:key="language"
                android:title="@string/language"
                android:summary="@string/select_language"
                android:defaultValue="en"
                android:entries="@array/languages"
                android:entryValues="@array/languagesValues"
                />

    </PreferenceScreen>

阵列.xml

代码语言:javascript
复制
    <?xml version="1.0" encoding="utf-8"?>
    <resources>

        <string-array name="languages">
            <item name="english">English</item>
            <item name="french">French</item>
        </string-array>

        <string-array name="languagesValues">
            <item name="english">en</item>
            <item name="french">fr</item>
        </string-array>

    </resources>

PreferenceActivity

代码语言:javascript
复制
        public class Settings extends PreferenceActivity {

            Locale myLocale;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.preferences);

            Preference langPreference = getPreferenceScreen().findPreference(
                    "language");
            langPreference.setOnPreferenceChangeListener(languageChangeListener);
        }

        Preference.OnPreferenceChangeListener languageChangeListener = new OnPreferenceChangeListener() {

            @Override
            public boolean onPreferenceChange(Preference preference, Object newValue) {

                switch (newValue.toString()) {
                case "en":
                    setLocale("en");
                     Toast.makeText(getApplicationContext(), "Locale in English!", Toast.LENGTH_LONG).show();
                    break;

                case "fr":
                    setLocale("fr");
                     Toast.makeText(getApplicationContext(), "Locale in French!", Toast.LENGTH_LONG).show();
                    break;
                }
                return false;
            }
        };

        //* manually changing current locale/
        public void setLocale(String lang) { 
            myLocale = new Locale(lang); 
            Resources res = getResources(); 
            DisplayMetrics dm = res.getDisplayMetrics(); 
            Configuration conf = res.getConfiguration(); 
            conf.locale = myLocale; 
            res.updateConfiguration(conf, dm); 
            Intent refresh = new Intent(this, Settings.class); 
            finish();
            startActivity(refresh); 
        } 

    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-05 00:01:52

您返回的是false而不是trueonPreferenceChange文档:返回"True“,用新值更新首选项的状态。

因为要返回false,所以没有更新Preference的状态。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30656088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档