当前位置: 首页 > 知识库问答 >
问题:

当我从字符串数组更改语言时,应用程序崩溃

慕祯
2023-03-14

我正在尝试更改下拉式适配器视图中的语言,该视图使用旋转adpater从字符串数组资源获取数据。我根据区域设置创建了两个不同的Strings.xml(一个用于法语,一个用于英语),但当我切换到法语并单击旋转器下拉菜单时,应用程序崩溃了。

下面是默认值目录中的Strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">Color Picker</string>
    <string name="new_name">Color Name</string>
    <string name="select">Please select a color</string>
    <string name="color1">Cyan</string>
    <string name="color2">Gray</string>
    <string name="color3">Yellow</string>
    <string name="color4">Green</string>
    <string name="color5">Magenta</string>
    <string name="color6">Blue</string>
    <string name="color7">White</string>
    <string name="color8">Red</string>
    <string-array name="color_array">
        <item>@string/select</item>
        <item>@string/color1</item>
        <item>@string/color2</item>
        <item>@string/color3</item>
        <item>G@string/color4</item>
        <item>@string/color5</item>
        <item>@string/color6</item>
        <item>@string/color7</item>
        <item>@string/color8</item>
    </string-array>
</resources>

下面是values-fr-rFR目录中的strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">Palette de Couleurs</string>
    <string name="new_name">Couleur Choisie</string>
    <string name="select">Choisissez une Couleur</string>
    <string name="color1">Marron</string>
    <string name="color2">Gris</string>
    <string name="color3">Jaune</string>
    <string name="color4">Vert</string>
    <string name="color5">Magenta</string>
    <string name="color6">Bleu</string>
    <string name="color7">Blanc</string>
    <string name="color8">Rouge</string>
    <string-array name="color_array">
        <item>@string/select</item>
        <item>string/color1</item>
        <item>string/color2</item>
        <item>string/color3</item>
        <item>string/color4</item>
        <item>string/color5</item>
        <item>string/color6</item>
        <item>string/color7</item>
        <item>string/color8</item>
    </string-array>
</resources>

这是自定义适配器中返回自定义视图的代码(视图是简单的文本视图)

private fun getCustomView(position: Int, convertView: View?, parent: ViewGroup): View {
    val view: View
    val txt: String = getItem(position).toString()

    if (convertView == null) {
        view = inflater.inflate(resID, parent, false)

        val textView = view.findViewById<TextView>(R.id.txtTextView)
        //txt = list[position]
        textView.text = txt

        setBackground(view, txt, position)

    } else {
        view = convertView
        setBackground(view, txt, position)
    }

    return view
}

这是我的主要activity--除了法语之外,所有的东西都是英语的--当你点击旋转器上的下拉菜单并选择一种颜色时,一个新的activity就会启动并显示所选的颜色。当语言为法语时,点击旋转器会自动崩溃应用程序,而没有选择颜色的机会

val colors = resources.getStringArray(R.array.color_array)

val spinner = findViewById<Spinner>(R.id.colorSpinner)

spinner?.adapter = (CustomAdapter(this, R.layout.activity_dropdown, colors))

spinner.onItemSelectedListener = object : OnItemSelectedListener{
    override fun onNothingSelected(parent: AdapterView<*>?) {
        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
    }

    override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
        val color = parent!!.getItemAtPosition(position).toString()

        if(position == 0){
            return
        }else{
            val intent = Intent(this@MainActivity, NewActivity::class.java).apply {
                putExtra(COLOR_MESSAGE, color)
            }
            startActivity(intent)
        }
    }
}

}

下面是应用程序崩溃的堆栈跟踪

2020-02-26 18:34:44.476 26860-26887/com.edu.coloractivity E/eglCodecCommon: GoldfishAddressSpaceHostMemoryAllocator: ioctl_ping failed for device_type=5, ret=-1
2020-02-26 18:34:46.681 26860-26860/com.edu.coloractivity E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.edu.coloractivity, PID: 26860
    java.lang.IllegalArgumentException: Unknown color
        at android.graphics.Color.parseColor(Color.java:1400)
        at com.edu.coloractivity.CustomAdapter.setBackground(CustomAdapter.kt:64)
        at com.edu.coloractivity.CustomAdapter.getCustomView(CustomAdapter.kt:35)
        at com.edu.coloractivity.CustomAdapter.getView(CustomAdapter.kt:42)
        at android.widget.BaseAdapter.getDropDownView(BaseAdapter.java:73)
        at com.edu.coloractivity.CustomAdapter.getDropDownView(CustomAdapter.kt:46)
        at android.widget.Spinner$DropDownAdapter.getDropDownView(Spinner.java:994)
        at android.widget.Spinner$DropDownAdapter.getView(Spinner.java:990)
        at android.widget.Spinner.measureContentWidth(Spinner.java:856)
        at android.widget.Spinner$DropdownPopup.computeContentWidth(Spinner.java:1225)
        at android.widget.Spinner$DropdownPopup.show(Spinner.java:1251)
        at android.widget.Spinner.performClick(Spinner.java:780)
        at androidx.appcompat.widget.AppCompatSpinner.performClick(AppCompatSpinner.java:443)
        at android.view.View.performClickInternal(View.java:6574)
        at android.view.View.access$3100(View.java:778)
        at android.view.View$PerformClick.run(View.java:25885)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6669)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

共有1个答案

宣冥夜
2023-03-14

可能只是错别字。在英语语言中的color_array中,有一个在@前面有G的项

<item>G@string/color4</item>

在法语中,你忘记了几个项目中的@before'string'。

<item>string/color1</item>
<item>string/color2</item>
<item>string/color3</item>
<item>string/color4</item>
<item>string/color5</item>
<item>string/color6</item>
<item>string/color7</item>
<item>string/color8</item>

试着修理一下,看看是否有用。

 类似资料:
  • 我希望我的应用程序支持三种语言西班牙语,葡萄牙语 1)3个可绘制文件夹可绘制-es,可绘制-pt,可绘制。 2)3个值文件夹值-es,值-pt,值。根据语言更改String.xml值。 我有imageView来选择语言。当点击它时,菜单打开,包括选项英语、西班牙语、葡萄牙语。 我通过以下代码在选项选择上设置应用程序内部的区域设置 我已在清单中声明-android:configChanges=“lo

  • 问题内容: 我正在使用FXML中描述的核心组件制作JavaFX桌面应用程序,我想为用户提供更改语言的选项。但是,一旦从FXML加载了组件,我还没有找到任何直接的方法来更改语言。 问题是,有什么标准方法可以处理JavaFX中的语言切换。 问题答案: 你可以做这样的事情。正如您在回答中一样,您可能希望将其实现为单例,或者使用DI框架在需要的地方注入单个实例: 现在,您可以执行以下操作: 而且任何时候您

  • 我正试图在Android Studio中制作一个可以“记住”我的成绩和科目的应用程序。目前,我正在开发一个允许我制作主题的系统。 编译后,没有错误,我打开应用程序,应用程序崩溃,我收到一个错误:“尝试在空对象引用上调用虚拟方法” 我认为字符串数组与此有关。 这是我的代码: 提前谢谢!

  • 主要内容:字符串结束标志(划重点),字符串长度用来存放字符的数组称为 字符数组,例如: 字符数组实际上是一系列字符的集合,也就是 字符串(String)。在C语言中,没有专门的字符串变量,没有string类型,通常就用一个字符数组来存放一个字符串。 C语言规定,可以将字符串直接赋值给字符数组,例如: 数组第 0 个元素为 ,第 1 个元素为 ,第 2 个元素为 ,后面的元素以此类推。 为了方便,你也可以不指定数组长度,从而写作: 给字符数组赋

  • 在程序设计中,为了方便处理,通常把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。在C语言中,数组属于构造数据结构。一个数组可以分解成多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按照数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。 本文主要介绍一维数组、二维数组和字符数组,其余的数组将会在以后的文章中介绍到。

  • 下面是一个名为“containers”的表的片段。 如何将“产品”列更改为“字符变化[]”,并将相应的修饰符更改为默认值“{}”::字符变化[]?本质上,我想将字符串转换为字符串数组。注意,“产品”列对字符数没有限制。 抛出以下错误 错误:“products”列不能转换为不同类型的字符[]