2017-11-08 66 views
0

경고를 피하기 위해 performClick in Kotlin을 재정의하는 방법.Kotlin OnTouchListener가 호출되었지만 performClick을 재정의하지 않습니다.

next.setOnTouchListener(View.OnTouchListener { view, motionEvent -> 
     when (motionEvent.action){ 
      MotionEvent.ACTION_DOWN -> { 
       val icon: Drawable = ContextCompat.getDrawable(activity.applicationContext, R.drawable.layer_bt_next) 
       icon.setColorFilter(Color.GRAY, PorterDuff.Mode.MULTIPLY) 
       next.setImageDrawable(icon) 
      } 
      MotionEvent.ACTION_UP -> { 
       //view.performClick() 
       next.setImageResource(R.drawable.layer_bt_next) 
      } 
     } 
     [email protected] true 
    }) 

view.performClick이 작동하지 않습니다.

답변

0

좋아, 나는 OnTouch 리스너를 무시하여 내 자신의 문제를 해결했다.

override fun onTouch(view: View, motionEvent: MotionEvent): Boolean { 
    when (view) { 
     next -> { 
      Log.d("next", "yeyy") 
      when (motionEvent.action){ 
       MotionEvent.ACTION_DOWN -> { 
        val icon: Drawable = ContextCompat.getDrawable(activity.applicationContext, R.drawable.layer_bt_next) 
        icon.setColorFilter(Color.GRAY, PorterDuff.Mode.MULTIPLY) 
        next.setImageDrawable(icon) 
       } 
       MotionEvent.ACTION_UP -> { 
        view.performClick() 
        next.setImageResource(R.drawable.layer_bt_next) 
       } 
      } 
     } 
     previous -> { 
      //ingredients here XD 
     } 
    } 
    return true 
} 

그리고 그 방법으로

, 나는하여 온 클릭을 사용할 수 있습니다 또한 단일 onTouch를 호출하고 많은 버튼을 구현할 수 있습니다 :

view.performClick() 

구현하는 것을 잊지 마세요 :

View.OnTouchListener 

수신자를 설정하십시오.

next.setOnTouchListener(this) 
previous.setOnTouchListener(this) 

주님 감사합니다! :)

0

나는 당신의 솔루션이 경고에 의해 실제로 문제를 해결할 것이라고 생각하지 않습니다. 경고는 특정 액세스 가능성 함수가 performClick()을 사용하여 버튼을 활성화 함을 나타냅니다. View 클래스를 살펴보면 performClick() funtions가 onClickListener를 직접 호출합니다. 즉, onTouchListener의 코드는 이러한 액세스 가능성 함수에 대해 실행되지 않습니다 (next.setImageResource (R.drawable.layer_bt_next)). 왜냐하면 뷰는 절대로 물리적으로 접촉해야하므로 onTouch 코드가 실행되지 않습니다. 당신이 중 하나를해야 하나 :

  1. 서브 클래스보기 당신의 onTouchListener를 설정하고, 코드를 실행은 PerformClick를 오버라이드 (override), 또는
  2. 이 코드를 실행 뷰 상에 OnClickListener를 설정한다.

당신은 당신의 onTouchListener 클래스에 OnClickListener를 구현하고 수동으로 (당신이 view.performClick()을 지금 가지고있는) 당신의 onTouchListener에서의 onclick()를 호출 한 다음 온 클릭 재정에 실행 코드를 이동할 수 있습니다. 또한보기에서 onTouchListener와 onClickListener를 모두 설정해야합니다.

+0

코드와 관련하여 예제를 제공 할 수 있습니까? 더 나은 이해를 위해. 감사 –