2017-11-08 15 views
0

performtをオーバーライドして警告を回避する方法。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を呼び出すことができますし、多くのボタンにそれを実装してもでのonClickを使用することができます実装することを忘れないでください

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. は、コードを実行ビューにonClickListenerを設定し、あなたが上onTouchListenerを設定しているビューをサブクラス、およびコードを実行するperformClickをオーバーライドし、または

あなたは自分のonTouchListenerクラスでonClickListener実装し、手動で(あなたが今view.performClick()を持っている)あなたのonTouchListenerからのonClick()を呼び出し、その後、onClickのオーバーライドに実行可能コードを移動することができます。また、ビューのonTouchListenerとonClickListenerの両方を設定する必要があります。

+0

コードを例に挙げることはできますか?理解を深めるためにありがとう –

関連する問題