Intereting Posts
Облицовочные вопросы с кинжалом котлин 2 Почему мы используем «объект-компаньон» как своего рода замену статическим полям Java в Котлине? transformClassesWithDesugar построить ошибку после обновления до AS 3.0 Canary 6 латинит, ленивый и одноэлементный узор в котлине Когда экземпляр Kotlin (объявленный с помощью модификатора объекта) создается? Как проверить класс с анонимным прослушивателем, который установлен внутри функции? Котлин: заявление Лямбде Котлин не поднимает идентификаторы ресурсов Использование JPA + H2 с Spring Boot + Kotlin – Загрузка с ошибкой Есть ли способ остановить сбой в пустое десятичное значение в EditText в kotlin? java.lang.NoClassDefFoundError: kotlin / jvm / internal / Intrinsics Kotlin и идиоматический способ писать, «если не null, else …», основанный на изменяемой ценности Как разместить расширение Kotlin в файле класса? Почему Kotlin не позволяет мне использовать расширение writeText? Android Studio / Kotlin: ошибка Gradle – не удается найти метод compile () для аргументов

Как использовать KeyEvent в Котлине

Это мой код fot kotlin / java. Я хочу учиться на этом.

Когда я нажимаю кнопку «ОК» на клавиатуре Android, я хочу, чтобы мое приложение выполняло то же самое, когда я нажимал свою кнопку с андроидом: onClick = "onAnswerClick"

Я знаю, что мой код не очень хорош. вы не можете помочь мне узнать, как его оптимизировать

Я не знаю, есть ли у него хорошая идея научиться кодировать на android с 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 aire(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.aire) as TextView ta.text = "" + c.aire(rayon) } else { val toasty = Toast.makeText(applicationContext, "Ce nombre est nul !", Toast.LENGTH_SHORT) toasty.show() } } } 

Я думаю, ваш вопрос заключается в том, как заставить приложение реагировать на ввод или сделанный ключ, когда вы нажимаете его в EditText.

Поскольку вы не указали свой макет, я сделаю несколько предположений.

Допустим, у вас есть и EditText, который имеет следующие атрибуты (плюс другие)

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

Вот пример активности, который будет реагировать на нажатие клавиши ввода.

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

Вы можете называть ваш onAnswerClick() в расположении onAnswerClick() println("call your method here") , передавая в textView если хотите.

В этом примере используется преобразование SAM Kotlin, которое описано в этом разделе документации Kotlin, в частности, оно использует преобразование SAM для создания TextView.OnEditorActionListener из выражения лямбда

Как отмечает Камиль Кулиг, на Java существует определенно больше примеров и примеров, чем у Kotlin, но я не думаю, что вам нужно начинать с Java. Вам нужно будет изучить достаточно Java, чтобы понять, что происходит в примерах и документации.