簡體   English   中英

在 Android 中使用多語言項目時,如何通過文本區分 Spinner 的選定項目?

[英]How can I discriminate the selected item of a Spinner by its text when using multilanguage items in Android?

我試圖通過其(多語言)文本來區分 Spinner 的選定項目。

這是我的默認字符串。xml 內容:

<string-array name="spinner_items">
    <item>length</item>
    <item>weight</item>
    <item>temperature</item>
</string-array>

而這是另一個strings.xml(意大利語)內容:

<string-array name="spinner_items">
    <item>lunghezza</item>
    <item>peso</item>
    <item>temperatura</item>
</string-array>

我以這種方式設置我的 Spinner 項目:

val items = resources.getStringArray(R.array.spinner_items)
spinner.adapter = ArrayAdapter(requireContext(), android.R.layout.simple_spinner_item, items)

然后我添加項目選擇的偵聽器:

spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {

    override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) {
        when(spinner.getItemAtPosition(position).toString()) {
            "length" -> actionLength()
            "lunghezza" -> actionLength()
            "weight" -> actionWeight()
            "peso" -> actionWeight()
            "temperature" -> actionTemperature()
            "temperatura" -> actionTemperature()
        }
    }

    override fun onNothingSelected(parent: AdapterView<*>) {}
}

一切正常,但問題是每次我添加新的語言區域時,我必須記住在 when 塊中添加特定的字符串翻譯。 有沒有更“動態”的方式來做到這一點?

我過去遇到過同樣的問題,這就是我解決它的方法。 通過為數組中的每個項目添加字符串資源名稱來編輯您的 strings.xml 文件,例如:

默認字符串。xml

<string name="length">length</string>
<string name="weight">weight</string>
<string name="temperature">temperature</string>

<string-array name="spinner_items">
    <item>@string/length</item>
    <item>@string/weight</item>
    <item>@string/temperature</item>
</string-array>

意大利語字符串。xml

<string name="length">lunghezza</string>
<string name="weight">peso</string>
<string name="temperature">temperatura</string>

<string-array name="spinner_items">
    <item>@string/length</item>
    <item>@string/weight</item>
    <item>@string/temperature</item>
</string-array>

因此,在您的代碼中,您將擁有:

when(spinner.getItemAtPosition(position).toString()) {
    getString(R.string.length) -> actionLength()
    getString(R.string.weight) -> actionWeight()
    getString(R.string.temperature) -> actionTemperature()
}

我希望我有幫助!

只需使用position

    spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {

        override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) {
            when(position) {
              0 -> actionLength()
              1 -> actionWeight()
              2 -> actionTemperature()
            }
        }

        override fun onNothingSelected(parent: AdapterView<*>) {}
    }

在您的數組中使用:

<string-array name="spinner_items">
    <item>@string/length</item>
    <item>@string/weight</item>
    <item>@string/temperature</item>
</string-array>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM