Issue
I started learning to develop Android applications in Kotlin two weeks ago. I’m currently trying to make some changes to my tip calculator application and am trying to display the text field input into a totalCost TextView (where you see the “Cost of Service” text below the “Tip Amount: $20.00”), but I’ve no idea how to go about doing that.
Click here to see the app layout
And here’s the code:
File activity_main.xml
<?xml version"1.0" encoding"utf-8"?>
<androidx.constraintlayout.widget.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"
android:padding"16dp"
tools:context".MainActivity">
<ImageView
android:id"@+id/icon_cost_of_service"
android:layout_width"wrap_content"
android:layout_height"wrap_content"
android:importantForAccessibility"no"
app:srcCompat"@drawable/ic_store"
app:layout_constraintStart_toStartOf"parent"
app:layout_constraintTop_toTopOf"@id/cost_of_service"
app:layout_constraintBottom_toBottomOf"@id/cost_of_service"/>
<com.google.android.material.textfield.TextInputLayout
android:id"@+id/cost_of_service"
android:layout_width"160dp"
android:layout_height"wrap_content"
android:hint"@string/cost_of_service"
android:layout_marginStart"16dp"
app:layout_constraintStart_toEndOf"@id/icon_cost_of_service"
app:layout_constraintTop_toTopOf"parent" >
<com.google.android.material.textfield.TextInputEditText
android:id"@+id/cost_of_service_edit_text"
android:layout_width"match_parent"
android:layout_height"wrap_content"
android:inputType"numberDecimal"/>
</com.google.android.material.textfield.TextInputLayout>
<ImageView
android:id"@+id/icon_service_question"
android:layout_width"wrap_content"
android:layout_height"wrap_content"
android:importantForAccessibility"no"
app:srcCompat"@drawable/ic_service"
app:layout_constraintStart_toStartOf"parent"
app:layout_constraintTop_toTopOf"@id/service_question"
app:layout_constraintBottom_toBottomOf"@id/service_question"/>
<TextView
android:id"@+id/service_question"
style"@style/Widget.TipTime.TextView"
android:layout_marginTop"16dp"
android:layout_width"wrap_content"
android:layout_height"wrap_content"
android:text"@string/how_was_the_service"
app:layout_constraintStart_toStartOf"@id/cost_of_service"
app:layout_constraintTop_toBottomOf"@id/cost_of_service" />
<RadioGroup
android:id"@+id/tip_options"
android:layout_width"wrap_content"
android:layout_height"wrap_content"
android:checkedButton"@id/option_twenty_percent"
android:orientation"vertical"
app:layout_constraintStart_toStartOf"@id/service_question"
app:layout_constraintTop_toBottomOf"@id/service_question">
<RadioButton
android:id"@+id/option_twenty_percent"
android:layout_width"wrap_content"
android:layout_height"wrap_content"
android:text"@string/amazing_service" />
<RadioButton
android:id"@+id/option_eighteen_percent"
android:layout_width"wrap_content"
android:layout_height"wrap_content"
android:text"@string/good_service" />
<RadioButton
android:id"@+id/option_fifteen_percent"
android:layout_width"wrap_content"
android:layout_height"wrap_content"
android:text"@string/ok_service" />
</RadioGroup>
<ImageView
android:id"@+id/icon_round_up"
android:layout_width"wrap_content"
android:layout_height"wrap_content"
android:importantForAccessibility"no"
app:srcCompat"@drawable/ic_round_up"
app:layout_constraintStart_toStartOf"parent"
app:layout_constraintTop_toTopOf"@id/round_up_switch"
app:layout_constraintBottom_toBottomOf"@id/round_up_switch"/>
<com.google.android.material.switchmaterial.SwitchMaterial
android:id"@+id/round_up_switch"
android:layout_width"0dp"
android:layout_height"wrap_content"
android:checked"true"
android:text"@string/round_up_tip"
app:layout_constraintEnd_toEndOf"parent"
android:layout_marginStart"16dp"
app:layout_constraintStart_toEndOf"@id/icon_round_up"
app:layout_constraintTop_toBottomOf"@id/tip_options" />
<Button
android:id"@+id/calculate_button"
android:layout_width"0dp"
android:layout_height"wrap_content"
android:text"@string/calculate"
android:layout_marginTop"8dp"
app:layout_constraintEnd_toEndOf"parent"
app:layout_constraintStart_toStartOf"@id/round_up_switch"
app:layout_constraintTop_toBottomOf"@id/round_up_switch" />
<TextView
android:id"@+id/tip_result"
style"@style/Widget.TipTime.TextView"
android:layout_width"wrap_content"
android:layout_height"wrap_content"
android:layout_marginTop"8dp"
app:layout_constraintEnd_toEndOf"parent"
app:layout_constraintTop_toBottomOf"@id/calculate_button"
tools:text"Tip Amount: $10" />
</androidx.constraintlayout.widget.ConstraintLayout>
File MainActivity.kt
package com.example.tiptime
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.example.tiptime.databinding.ActivityMainBinding
import java.text.NumberFormat
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.calculateButton.setOnClickListener { calculateTip() }
}
fun calculateTip() {
val stringInTextField binding.costOfServiceEditText.text.toString()
val cost stringInTextField.toDoubleOrNull()
if (cost null) {
binding.tipResult.text ""
return
}
val tipPercentage when (binding.tipOptions.checkedRadioButtonId) {
R.id.option_twenty_percent -> 0.20
R.id.option_eighteen_percent -> 0.18
else -> 0.15
}
var tip tipPercentage * cost
if (binding.roundUpSwitch.isChecked) {
tip kotlin.math.ceil(tip)
}
val formattedTip NumberFormat.getCurrencyInstance().format(tip)
binding.tipResult.text getString(R.string.tip_amount, formattedTip)
}
}
Solution
To get text from edit text box you can do the following:
val editText findViewById<EditText>(R.id.cost_of_service_edit_text)
val textValue text.text.toString()
And to set text to a textView you would do:
val textView findViewById<EditText>(R.id.textViewId)
textView.text textValue
Answered By – Amy