【问题标题】:Getting float/double from NumberPicker从 NumberPicker 获取浮点数/双精度数
【发布时间】:2013-08-30 03:35:20
【问题描述】:

我正在尝试https://github.com/SimonVT/android-numberpicker 库,参考是https://developer.android.com/reference/android/widget/NumberPicker.html#getValue%28%29 现在,API 级别 11 NumberPicker 在 getValue 方法中返回 int 值,SimonVT numberpicker 也返回 int 值。

但我使用以下代码在数字选择器中设置了双值:

String[] nums = {"1","1.5","2","2.5","3","3.5","4","4.5","5","5.5","6","6.5","7","7.5","8","8.5","9"};

final NumberPicker listeningScorenp = (NumberPicker) findViewById(R.id.listeningScore);
listeningScorenp.setMaxValue(nums.length-1);
listeningScorenp.setMinValue(0);
listeningScorenp.setWrapSelectorWheel(false);
listeningScorenp.setDisplayedValues(nums);

现在我不知道如何从 NUMberPicker 检索浮点/双精度值。

【问题讨论】:

    标签: android numberpicker


    【解决方案1】:

    我刚刚使用您的代码进行了测试。 getValue() 实际上返回所选项目的索引(仅当您设置显示值时)。你需要做的就是解析字符串,你就会得到你想要的。

    String[] nums = {"1","1.5","2","2.5","3","3.5","4","4.5","5","5.5","6","6.5","7","7.5","8","8.5","9"};
    int index = listeningScorenp.getValue();
    String val = nums[index];
    float selectedFloat = Float.parseFloat(val);
    

    【讨论】:

    【解决方案2】:

    Kotlin 中,您可以使用这个方便的 NumberPicker 扩展,它会显示一个对话框 - 在包装之下,它会将您的 Double 值缩放到合适的 Int 范围并转换 Int在调用任何回调之前将值返回到Doubles。所以它基本上隐藏了NumberPicker只支持Int的事实。感觉NumberPicker居然会支持Double,试试看!

    这是您可以复制和粘贴片段扩展

    fun Fragment.showNumberPickerDialog(
        title: String,
        value: Double,
        range: ClosedRange<Double>,
        stepSize: Double,
        formatToString: (Double) -> String,
        valueChooseAction: (Double) -> Unit
    ) {
        val numberPicker = NumberPicker(context).apply {
            setFormatter { formatToString(it.toDouble() * stepSize) }
            wrapSelectorWheel = false
    
            minValue = (range.start / stepSize).toInt()
            maxValue = (range.endInclusive / stepSize).toInt()
            this.value = (value.toDouble() / stepSize).toInt()
    
            // NOTE: workaround for a bug that rendered the selected value wrong until user scrolled, see also: https://stackoverflow.com/q/27343772/3451975
            (NumberPicker::class.java.getDeclaredField("mInputText").apply { isAccessible = true }.get(this) as EditText).filters = emptyArray()
        }
    
        MaterialAlertDialogBuilder(context)
            .setTitle(title)
            .setView(numberPicker)
            .setPositiveButton("OK") { _, _ -> valueChooseAction(numberPicker.value.toDouble() * stepSize) }
            .setNeutralButton("Cancel") { _, _ -> /* do nothing, closes dialog automatically */ }
            .show()
    }
    

    那么你可以像这样使用它

    showNumberPickerDialog(
        title = "Your Weight",
        value = 75.0, // in kilograms
        range = 10.0 .. 300.0,
        formatToString = { "$it kg" },
        valueChooseAction = { saveNewWeight(it) }
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-19
      • 2018-02-23
      • 1970-01-01
      • 2011-05-09
      • 1970-01-01
      • 1970-01-01
      • 2017-01-19
      • 1970-01-01
      相关资源
      最近更新 更多