2017-10-12 1 views
1

J'ai donc ces valeurs (Long et Double) dans trois champs de texte. Ils représentent le temps, le rythme et la distance. Maintenant, pour éviter les erreurs de l'utilisateur, je veux leur faire choisir les valeurs en utilisant numberPickers. Je veux remplacer ces champs de texte par ces sélecteurs.Android passe Kotlin valeur de textfields à numberPicker

C'est ce que j'ai:

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() 
      } 
     } 
    } 

Comme vous pouvez le voir, j'ai les ramasseurs set et tout cela. J'ai essayé d'appeler quelque chose comme .value mais cela n'a pas fonctionné.

Ceci est mon layout, donc vous pouvez avoir un peu de compréhension du concept.

Des conseils? :)

Merci

EDIT 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" /> 

EDIT VALEUR AUDITEUR

j'ajouté, mais ne fait rien

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 
    } 
+0

peut vous envoyer votre fichier XML – UltimateDevil

+0

fait. sous edit – MirandaBy

+0

Ok, laissez-moi vérifier – UltimateDevil

Répondre

0

Quelques choses Kotlin générales à noter: Je vois que vous définissez les variables et la coulée du nombre des ramasseurs. Vous n'avez pas besoin de faire ça. Dans Kotlin, avec l'importation correcte, quelque chose comme: kotlinx.android.synthetic.main.my_layout_file.*, vous pouvez simplement appeler le xml par son id sans lancer, comme ceci: numberPicker. Cela vaut pour vos autres articles, tels que les TextView s. L'autre chose est que vous ne devriez pas avoir à appeler Integer.toString(pickedValue). Vous pouvez simplement appeler pickedValue.toString().

Enfin, depuis que je suis incapable de voir exactement comment vous testez l'application, ma suggestion serait de faire ce qui suit:

Créer des variables pour stocker les valeurs de sélecteur:

var numPickerVal = 0; 
var secondsPickerVal = 0; 

Ensuite, réglez un écouteur de changement pour chacun des ramasseurs:

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

Salut, merci ... sur mes vars, il est dit qu'ils ne sont jamais accessibles? C'est bizarre – MirandaBy

+0

Malheureusement, tout ne peut pas être codé pour vous. Vous devrez résoudre tous les problèmes de compilation et continuer à déboguer. Je suggère peut-être prendre plus de temps pour en apprendre davantage sur Kotlin en général, ainsi que son utilisation dans le développement Android. –

+0

hm ok alors. Merci – MirandaBy