Я пытаюсь изменить язык в своем представлении адаптера стиля выпадающего меню, в котором используется спиннер adpater для получения данных из массива строк. Я создал две разные строки. xml на основе локалей (одна для французского и одна для английского sh), но когда я переключился на французский и нажал на выпадающее меню счетчика, приложение вылетало.
Ниже строки. 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>
Ниже приведены строки. xml внутри каталога values-fr-rFR
<?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
}
Это мое основное занятие - все работает на английском sh, кроме как на французском - когда вы щелкаете по выпадающему меню и выбираете цвет, начинается новое действие и отображается выбранный цвет. Когда язык французский, нажатие на спиннер автоматически приводит к сбою приложения без возможности выбрать цвет
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)
}
}
}
}
Вот трассировка стека в приложении cra sh
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)