Cómo usar KeyEvent en Kotlin

Este es mi primer código de kotlin / java. Quiero aprender de esto.

Cuando presiono el button "Aceptar" del keyboard de Android, quiero que mi aplicación haga lo mismo cuando presiono mi button con Android: onClick = "onAnswerClick"

Sé que mi código no es muy bueno. no puedes ayudarme a saber cómo optimizarlo

No sé si es una buena idea aprender a codificar en Android con kotlin.

import android.annotation.SuppressLint import android.app.Activity import android.os.Bundle import android.view.KeyEvent import android.view.View import android.view.inputmethod.EditorInfo import android.widget.* import android.widget.AdapterView import android.widget.Toast import android.widget.Spinner import kotlinx.android.synthetic.main.activity_main.* import android.widget.EditText class MainActivity : Activity() { class Calculateurs{ fun air(r: Double): Double{ return 3.141592 * r * r } fun circonference(r: Double): Double{ return 2.0 * 3.141592 * r } } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val spinner = findViewById<Spinner>(R.id.spinner) as Spinner // Create an ArrayAdapter using the string array and a default spinner layout val adapter = ArrayAdapter.createFromResource(this, R.array.mesure_array, android.R.layout.simple_spinner_item) // Specify the layout to use when the list of choices appears adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) // Apply the adapter to the spinner spinner.adapter = adapter } @SuppressLint("SetTextI18n") fun onAnswerClick(view: View) { val answer = (findViewById<EditText>(R.id.editText2) as EditText).text.toString() val spinner = findViewById<View>(R.id.spinner) as Spinner var rayon = java.lang.Double.parseDouble(answer) if (spinner.getSelectedItem() == "Diamètre"){ rayon = rayon *2 } if (rayon < 0) { val toasty = Toast.makeText(applicationContext, "Ce nombre est négatif !", Toast.LENGTH_SHORT) toasty.show() } else if (rayon > 0) { val c = Calculateurs() val tc = findViewById<TextView>(R.id.cire) as TextView tc.text = "" + c.circonference(rayon) val ta = findViewById<TextView>(R.id.air) as TextView ta.text = "" + c.air(rayon) } else { val toasty = Toast.makeText(applicationContext, "Ce nombre est nul !", Toast.LENGTH_SHORT) toasty.show() } } } 

Creo que su pregunta es cómo hace que su aplicación responda a la tecla enter o done cuando lo presiona en EditText.

Como no mostró su layout, haré algunas suposiciones.

Digamos que tiene y EditText que tiene los siguientes attributes (más otros)

 <EditText android:id="@+id/field" android:imeOptions="actionDone" android:inputType="text" ... app:layout_constraintTop_toTopOf="parent" /> 

Aquí hay una actividad de ejemplo que responderá al presionar la tecla Intro.

 class MainActivity : AppCompatActivity() { lateinit var field: EditText override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) field = findViewById(R.id.field) as EditText } override fun onResume() { super.onResume() field.setOnEditorActionListener( { textView, action, event -> var handled = false if (action == EditorInfo.IME_ACTION_DONE) { println("call your method here") handled = true } handled }) } 

Puedes llamar a onAnswerClick() en la location de la println("call your method here") , pasando textView si lo deseas.

Este ejemplo hace uso de la Conversión SAM de Kotlin que se trata en esta sección de la documentation de Kotlin, específicamente utiliza la conversión SAM para crear un TextView.OnEditorActionListener a partir de una expresión lambda

Como señala Kamil Kulig, definitivamente hay más muestras y ejemplos que usan Java que Kotlin, pero no creo que deba comenzar con Java. Sin embargo, deberá aprender suficiente Java para poder entender lo que está sucediendo en ejemplos y documentation.

  • ¿Qué significa ". ()" En Kotlin?
  • Kotlin - Extensión para la class final
  • Inicializar ArrayList <ArrayList <Int >> con un tamaño en kotlin
  • Comportamiento System.identityHashCode () en primitivas
  • Delegación de la class Koltin, pasando esto a delegado
  • IntelliJ no clasifica las importaciones de Kotlin
  • kotlin-android null no se puede convertir a tipo no nulo kotlin.String
  • Kotlin con map (No se muestra el marcador)
  • Límites generics de Kotlin para la class
  • Error de byte de file en kotlin. Cómo transferir correctamente?
  • ¿Cómo las funciones de almacenamiento en la colección estática afectarán el sistema?