Intereting Posts
Как настроить веб-проект с помощью Kotlin в фоновом и в браузере? Котлин не работает над Android Studio Общие понятия Котлина: несоответствие типов в параметре общей карты String :: toByteArray () не компилируется в Kotlin Как написать преобразование многократного использования для значения String to Enum в группе классов Enum? (Котлин) Как отладить NoClassDefFoundError (Gradle, Kotlin) Как подсчитать время выполнения наблюдаемого Kotlin maven plugin порядок компиляции Как реализовать аутентификацию телефона с использованием Firebase в Котлине? Обновление представления Recycler и создание Parcelables для вращения экрана (что здесь лучше всего подходит?) Android проверяет, соответствует ли текстовый ввод (время) формату Неверное текстовое изображение IllegalStateException не имеет значения для Kotlin Котлин инициализирует переменную перед ее объявлением? RxJava (Kotlin), Observable.amb и PublishSubject не стреляют Декларация интерфейса Java vs Kotlin

Android – Trigger MainActivity, чтобы сделать что-то из пользовательского вида

Я хочу, чтобы моя MainActivity знала, что есть что-то делать (например, вычислять вещи) из пользовательского View . View определяет входные данные пользователя прикосновением, и MainActivity должен обновлять определенные пользовательские элементы управления с помощью вычисления из этих View -Values. В основном я сделал переопределение на onTouchEvent :

 override fun onTouchEvent(event: MotionEvent?): Boolean { val x = event?.x val y = event?.y val dX = x?.minus(prevX) val dY = y?.minus(prevY) if(dX!! > 0){ lowerBound = x.toInt() } else{ upperBound = x.toInt() } prevX = x!!.toInt() prevY = y!!.toInt() this.invalidate() //tell view to redraw return true } 

Как я могу позволить MainActivity знать, что lowerBound и upperBound обновлены?

Solutions Collecting From Web of "Android – Trigger MainActivity, чтобы сделать что-то из пользовательского вида"

Как уже рекомендовано в комментариях, я пойду немного глубже в «горячем использовании слушателя».

Прежде всего, «слушатель» – это не что иное, как interface вызываемый, если что-то происходит в другом месте. Лучшим примером является View.setOnClickListener(View) .

Как это использовать в вашем случае?

Просто определите interface (наилучшее расположение здесь внутри вашего пользовательского вида):

 interface OnBoundsUpdatedListener { fun onBoundsUpdated(upperBound: Int, lowerBound: Int) } 

Затем вы должны создать свойство в своем CustomView и вызвать Listener, если границы изменились:

 // Constructor and stuff val onBoundsUpdateListener: OnBoundsUpdatedListener? = null override fun onTouchEvent(event: MotionEvent?): Boolean { ... onBoundsUpdateListener?.onBoundsUpdated(upperBound, lowerBound) ... } 

В вашем Activtiy вы можете найти View и установить прослушиватель:

 val myCustomView = findViewById<MyCustomView>(R.id.id_of_your_customview) myCustomView.onBoundsUpdateListener = object : OnBoundsUpdatedListener { override fun onBoundsUpdated(upperBound, lowerBound) { // Get called if its called in your CustomView } } 

Примечание. Код можно упростить. Но это основной материал 😉