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

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