【问题标题】:Android Kotlin pass value from textfields to numberPickerAndroid Kotlin 将值从文本字段传递到 numberPicker
【发布时间】:2018-03-24 03:15:36
【问题描述】:

所以我在三个文本字段中有这些值(Long 和 Double)。它们代表时间、步伐和距离。

现在,为了防止用户出错,我想让他们使用 numberPickers 选择值。我想用那些选择器替换那些文本字段。

这就是我所拥有的:

val time = timeTxtField as TextView
    val distance = distanceTxtField as TextView
    val pace = paceTxtField as TextView
    var resetRunningBtn = clearBtn
    val pickerMinutes = numberPicker as NumberPicker
    val pickerSeconds = numberPickerSeconds as NumberPicker

    pickerMinutes.minValue = 0
    pickerMinutes.maxValue = 59
    pickerMinutes.wrapSelectorWheel = false

    pickerSeconds.minValue = 0
    pickerSeconds.maxValue = 60
    pickerSeconds.wrapSelectorWheel = false




    calculateBtn.setOnClickListener {

        when {

            time.text.isEmpty() && (distance.text.isNotEmpty() && pace.text.isNotEmpty()) ->
                calculatePace(null, distance.text.toString().toDouble(), pace.text.toString())

            distance.text.isEmpty() && (time.text.isNotEmpty() && pace.text.isNotEmpty()) ->
                calculatePace(time.text.toString(), null, pace.text.toString())

            pace.text.isEmpty() && (time.text.isNotEmpty() && distance.text.isNotEmpty()) ->
                calculatePace(time.text.toString(), distance.text.toString().toDouble(), null)

            else -> {
                Toast.makeText(this, "Please check fields",
                        Toast.LENGTH_SHORT).show()
            }
        }
    }

如您所见,我设置了选择器等等。我尝试拨打类似.value 的电话,但没有成功。

这是我的layout,所以你可以对这个概念有一点了解。

有什么建议吗? :)

谢谢

编辑 XML:

      <?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
tools:context="com.reecreate.woderator2.Controller.RunningCalculatorActivity">

<TextView
    android:id="@+id/textView5"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginEnd="8dp"
    android:layout_marginStart="8dp"
    android:layout_marginTop="8dp"
    android:text="Running Pace Calculator"
    android:textSize="24sp"
    android:textStyle="bold"
    android:inputType="numberDecimal"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

<EditText
    android:id="@+id/distanceTxtField"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginEnd="8dp"
    android:layout_marginStart="8dp"
    android:layout_marginTop="28dp"
    android:ems="10"
    android:hint="distance..."
    android:inputType="number|numberDecimal"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.503"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/radioType" />

<EditText
    android:id="@+id/timeTxtField"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginEnd="8dp"
    android:layout_marginStart="8dp"
    android:layout_marginTop="16dp"
    android:ems="10"
    android:hint="time mm:ss"
    android:inputType="time"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/distanceTxtField" />

<EditText
    android:id="@+id/paceTxtField"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginEnd="8dp"
    android:layout_marginStart="8dp"
    android:layout_marginTop="16dp"
    android:ems="10"
    android:hint="pace mm:ss 10:21"
    android:inputType="time"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/timeTxtField" />

<RadioGroup
    android:id="@+id/radioType"
    android:layout_width="280dp"
    android:layout_height="56dp"
    android:layout_marginEnd="8dp"
    android:layout_marginStart="8dp"
    android:layout_marginTop="24dp"
    android:orientation="horizontal"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/textView5">

    <RadioButton
        android:id="@+id/milesDistanceRadioBtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginEnd="140dp"
        android:layout_marginTop="16dp"
        android:text="Miles"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintLeft_toRightOf="@id/kmDistanceRadioBtn"
        app:layout_constraintTop_toBottomOf="@id/textView5" />

    <RadioButton
        android:id="@+id/kmDistanceRadioBtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginTop="16dp"
        android:text="KM"
        app:layout_constraintEnd_toStartOf="@+id/milesRadioBtn"
        app:layout_constraintHorizontal_bias="0.694"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</RadioGroup>

<RadioGroup
    android:id="@+id/paceRadioGroup"
    android:layout_width="wrap_content"
    android:layout_height="45dp"
    android:layout_marginEnd="8dp"
    android:layout_marginStart="8dp"
    android:layout_marginTop="32dp"
    android:orientation="horizontal"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.294"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/paceTxtField">

    <RadioButton
        android:id="@+id/milesPaceRadioBtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginEnd="140dp"
        android:layout_marginTop="16dp"
        android:text="MILES PACE"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintLeft_toRightOf="@id/kmDistanceRadioBtn"
        app:layout_constraintTop_toTopOf="parent" />

    <RadioButton
        android:id="@+id/kmPaceRadioBtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginTop="16dp"
        android:text="KM PACE"
        app:layout_constraintEnd_toStartOf="@+id/milesDistanceRadioBtn"
        app:layout_constraintHorizontal_bias="0.694"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />


</RadioGroup>


<Button
    android:id="@+id/calculateBtn"
    style="@style/Widget.AppCompat.Button.Borderless.Colored"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:background="@color/colorAccent"
    android:text="Calculate"
    android:textColor="@android:color/background_light"
    android:textStyle="bold"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent" />


<TextView
    android:id="@+id/result"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginEnd="24dp"
    android:layout_marginStart="24dp"
    android:layout_marginTop="24dp"
    android:background="@drawable/border"
    android:hint="Result"
    android:textAlignment="center"
    android:textSize="18sp"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.0"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/paceRadioGroup" />

<Button
    android:id="@+id/clearBtn"
    style="@style/Widget.AppCompat.Button.Borderless"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginEnd="8dp"
    android:layout_marginStart="8dp"
    android:layout_marginTop="24dp"
    android:background="@color/colorAccent"
    android:text="CLEAR"
    android:textColor="@android:color/background_light"
    android:textStyle="bold"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/result" />
<NumberPicker
    android:id="@+id/numberPicker"
    android:layout_width="64dp"
    android:layout_height="119dp"
    android:layout_marginEnd="8dp"
    android:layout_marginStart="8dp"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.407"
    app:layout_constraintTop_toBottomOf="@+id/radioType" />

<NumberPicker
    android:id="@+id/numberPickerSeconds"
    android:layout_width="64dp"
    android:layout_height="119dp"
    android:layout_marginEnd="8dp"
    android:layout_marginTop="8dp"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/numberPicker" />

编辑值监听器

我添加了这个,但没有做任何事情

var pickedValue: Int = pickerMinutes.value
    time.setText(Integer.toString(pickedValue))

.......

 when {
        pickerMinutes.isClickable -> time.setText(Integer.toString(pickedValue))

    }

    numberPicker.setOnValueChangedListener { pickerMinutes, oldVal, newVal ->
        //store values in variable for use later
    }

【问题讨论】:

  • 你能发布你的 XML 文件吗
  • 完成。编辑中
  • 好的,我检查一下
  • 问题是你没有从 numberPickers 获得价值
  • 拾取器是这样的,因为我没有更多的空间给它们。但我最终会拥有三个。一个小时,另一个分钟,另一个秒。我最终会有 6 个选择器。一组 3 用于时间,另一组 3 用于速度。有道理

标签: android kotlin numberpicker


【解决方案1】:

需要注意的一些一般 Kotlin 事项:我看到您正在设置变量并转换数字选择器。你不需要这样做。在 Kotlin 中,通过正确的导入,例如:kotlinx.android.synthetic.main.my_layout_file.*,您可以简单地通过其 id 调用 xml 而无需强制转换,例如:numberPicker。这也适用于您的其他项目,例如TextViews。

另一件事是您不必致电Integer.toString(pickedValue)。您可以拨打pickedValue.toString()

最后,由于我无法确切了解您是如何测试应用程序的,我的建议是执行以下操作:

创建变量来存储选择器值:

 var numPickerVal = 0;
 var secondsPickerVal = 0;

然后为每个选择器设置一个更改监听器:

numberPicker.setOnValueChangedListener { picker, oldVal, newVal -> 
    numPickerVal = newVal 
}
numberPickerSeconds.setOnValueChangedListener { picker, oldVal, newVal -> 
    secondsPickerVal = newVal 
}

【讨论】:

  • 嗨,谢谢...在我的变量上,它说它们永远不会被访问?这很奇怪
  • 不幸的是,它不能全部为您编码。您必须解决任何编译问题并继续调试。我建议您花更多时间了解 Kotlin 的总体情况以及它在 Android 开发中的用途。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-23
  • 2015-03-25
  • 1970-01-01
相关资源
最近更新 更多