Android 微调器中的选定项应映射该项';字符串数组中的名称不是下拉列表中的位置

Android 微调器中的选定项应映射该项';字符串数组中的名称不是下拉列表中的位置,android,xml-parsing,android-spinner,Android,Xml Parsing,Android Spinner,我有一个字符串数组,它的项有各自的名称。像这样, <string-array name="languages"> <item name="en_US">English</item> <item name="fi">Finnish</item> <item name="fr">French</item> <item name="de">German</item>

我有一个字符串数组,它的项有各自的名称。像这样,

<string-array name="languages">
    <item name="en_US">English</item>
    <item name="fi">Finnish</item>
    <item name="fr">French</item>
    <item name="de">German</item>
    <item name="sk">Slovakian</item>
    <item name="pl">Polish</item>
</string-array>

英语
芬兰语
法语
德国的
斯洛伐克人
磨光
我正试图用这个改变我的应用程序的语言。我所做的一切都很好。但我想用不同的方式。让我们看看在选择微调器项时如何更改语言

public void onItemSelected(AdapterView<?> arg0, View arg1,
                int arg2, long arg3) {

            switch (arg2) {
            case 0:
                // do nothing
                break;

            case 1:
                setLocale("en_US"); // english
                break;

            case 2:
                setLocale("fi"); // finnish
                break;

            case 3:
                setLocale("fr"); // french
                break;

            case 4:
                setLocale("de"); // german
                break;

            case 5:
                setLocale("sk"); // slovakian
                break;

            case 6:
                setLocale("pl"); // polish
                break;

            case 7:
                setLocale("nl"); // Dutch
                break;
            }

        }
已选择公共视图(AdapterView arg0、视图arg1、, 整数arg2,长arg3){ 开关(arg2){ 案例0: //无所事事 打破 案例1: setLocale(“en_US”);//英语 打破 案例2: setLocale(“fi”);//芬兰语 打破 案例3: setLocale(“fr”);//法语 打破 案例4: setLocale(“de”);//德语 打破 案例5: setLocale(“sk”);//斯洛伐克语 打破 案例6: setLocale(“pl”);//波兰语 打破 案例7: setLocale(“nl”);//荷兰语 打破 } }
我不希望这样做,而是希望将所选项目(arg2)映射到xml文件中的项目名称。我之所以要这样做是因为将来如果有人想删除或添加更多语言,它应该很方便。就这些

创建第二个数组,该数组镜像第一个数组,但其值与您希望使用的语言代码相同。然后调用将为您提供有问题的
字符串
数组。然后只需使用
arg2
(可能会添加一个)对其进行索引,即可获得所需的区域设置

例如:

String[] locales = getResources().getStringArray(R.array.locales);
setLocale(locales[arg2]);
但这只有在您用您的区域设置填充一个新的字符串数组资源时才有效

试试这个

在活动onCreate中

String[] langArray = getResources().getStringArray(R.array.languages);
内开关箱

 String selectedLAnguage = langArray[arg2];

你是说像这样;String[]language=getResources().getStringArray(arg2);if(language=en_US){}但在spinner下拉列表中获取数组列表不需要此适配器:但在本例中不需要;ArrayAdapter=ArrayAdapter.createFromResource(此,languageArray,R.layout.spinner_行);您需要为该方法提供2个资源ID。看起来你给了它一个数组和一个资源ID。给它R.array.languagesSorry在我接受了答案之后,我又来烦你了。我怀疑,所选项目在字符串数组、项目名称或其值中引用了什么?我相信字符串数组中的项目名称会被忽略,因此当您获得字符串数组资源时,您将获得其值的数组。这就是为什么必须有2个字符串数组资源。一个填充了您的语言名称(正如您所拥有的),另一个填充了区域设置;ArrayAdapter=ArrayAdapter.createFromResource(此,languageArray,R.layout.spinner_行);