Android Kotlin将文本字段的值传递给numberPicker

所以我有三个文本框中的这些值(长和双)。 他们代表时间,速度和距离。

现在,为了防止用户错误,我想让他们选择使用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但它没有工作。

这是我的布局 ,所以你可以有一点理解这个概念。

任何提示? 🙂

谢谢

编辑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 } 

几个一般的Kotlin要注意的事情:我看到你正在设置变量和铸造数字选择器。 你不需要这样做。 在Kotlin中,使用正确的导入,就像: kotlinx.android.synthetic.main.my_layout_file.* ,你可以简单的通过它的id来调用xml,而不用像下面这样: numberPicker 。 这也适用于其他项目,如TextView

另一件事是你不应该调用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 } 
Interesting Posts