2017-12-23 25 views
2

MainActivity에 사용자 정의 View에서 수행 할 작업이 있음을 알리고 싶습니다. View은 터치를 통해 사용자 입력을 감지하고 MainActivity는 특정 사용자 컨트롤을 View - 값의 계산으로 업데이트해야합니다. 내가 MainActivitylowerBoundupperBound 업데이트 있음을 알려 수있는 방법Android - 트리거 사용자 정의 작업을 수행하는 MainActivity보기

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 
} 

: 기본적으로 나는 onTouchEvent에 대한 재정의를 했습니까?

+2

달성하려는 목표를 잘 모르겠지만 직접 새로운 활동을 시작하는 것이 가장 좋은 방법은 아닙니다. 내가 생각할 수있는 첫 번째 사항은 청취자를 생성하고 활동을 보류에서보기로 전달하는 것입니다. 그리고 나중에 당신의 의도를 통해 필요한 가치를 다른 활동으로 전달하십시오. –

+0

새로운 액티비티를 시작하고 싶지 않습니다. 현재 MainUI Acitivty가 물건을 계산하고 UI 컨트롤을 업데이트해야한다는 것을 알고 싶습니다. – binaryBigInt

+1

그래서 청취자를 정의하는 데 나쁜 점이 있습니까? –

답변

0

의견에서 이미 추천 한대로 "청취자를 사로 잡기"에 조금 더 자세히 설명 할 것입니다.

우선 "청취자"는 다른 곳에서 뭔가가 발생하면 호출되는 interface 일뿐입니다. 가장 좋은 예는 View.setOnClickListener(View)입니다.

어떻게 사용 하시겠습니까?

는 단순히 interface (최고의 위치를 ​​사용자 정의보기 안에 여기에) 정의 : 경계가 변경 한 경우

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

그런 다음 당신이 리스너를 당신의 CustomView의 속성을 만들고 호출 할 필요가 :

// Constructor and stuff 
val onBoundsUpdateListener: OnBoundsUpdatedListener? = null 


override fun onTouchEvent(event: MotionEvent?): Boolean { 
... 
onBoundsUpdateListener?.onBoundsUpdated(upperBound, lowerBound) 
... 
} 
당신에

Activtiy 해당보기를 찾아 청취자 설정할 수 있습니다

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

참고 : 코드를 단순화 할 수 있습니다. 그러나 그것은 기본 내용입니다.