NumberPicker 在“value=1”时使用自定义文本显示错误值

NumberPicker showing wrong values with custom text when `value=1`

提问人:RhetoricalRuvim 提问时间:8/7/2023 更新时间:8/7/2023 访问量:28

问:

我正在尝试让 NumberPicker 显示一组自定义选择,并从列表中的第二项开始 ()。选项包括:C、C、C♭#、D 和 D♭,选取器为第二项显示“C”,但显示“C”,列表中有两个“C♭♭”项:value=1

Screenshot of NumberPicker misbehaving and showing two "C♭" instead of one "C" and one "C♭".

使用触摸输入滚动 NumberPicker 可以“修复”此问题,但这并不是真正的修复,因为用户不希望必须与视图交互以使其显示正确的值。它应该从一开始就正确显示。这似乎只发生在“C”排在第一位,“C”排在第二位,我将值设置为(所以,“C♭”)。如果我将值设置为 0 或 2,或者如果“C#”在前面,或者如果 C 在前面,则不会发生该错误。1

这是我的布局 XML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <NumberPicker
        android:id="@+id/npExample"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />

</LinearLayout>

这是我的 Kotlin:

package com.example.myapplication

import android.os.Bundle
import android.widget.NumberPicker
import androidx.activity.ComponentActivity

class MainActivity : ComponentActivity() {
    var npExample : NumberPicker? = null

    val exampleValues = arrayOf(
        "C♭",
        "C",
        "C#",
        "D♭",
        "D"
    )

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        npExample = findViewById(R.id.npExample)
        npExample!!.minValue = 0
        npExample!!.maxValue = exampleValues.size - 1
        npExample!!.displayedValues = exampleValues
    }

    override fun onResume() {
        super.onResume()
        // Read the value we need from preferences here.
        // For this example, we just hard-code the value into Kotlin to demo the behavior.
        val exampleValue = 1
        npExample?.value = exampleValue
    }

}

有什么想法吗?谢谢。

Android setValue NumberPicker

评论

0赞 Ivan Abakumov 8/7/2023
我检查了您的实现以及另一个元素列表。原来,这是渲染特定元素的问题。例如,如果你采用一个包含“值 1”等元素的列表,那么一切都会正常工作。我还没有弄清楚为什么在您的情况下会出现此问题,但我建议尝试使用 NumberPicker 的自定义库并使用它进行测试。

答: 暂无答案