View has onTouchListner called on it but doesn’t override performClick (kotlin)
問題
以下のようにある ImageView のインスタンスに対して、setOnTouchListener を実装して画像に対するタッチイベントを実装したところ、動作はするのですが、”View has onTouchListner called on it but doesn’t override performClick” の警告がIDE上で表示されたままになりました。
image.setOnTouchListener { v, event ->
(省略)
対処
performClickをoverrideしないといけないという警告ですが、元の ImageView に対して行うのは大変なので、CustomImageView というクラスを作成して、そこで override してあげるようにします。
2つのコンストラクタもきちんと定義しておかないと、コンパイルエラーになります。
class CustomImageView : AppCompatImageView { constructor(ctx: Context) : super(ctx) constructor(ctx: Context, attrs: AttributeSet): super(ctx, attrs) override fun performClick(): Boolean { super.performClick() return true } }
レイアウトファイル上で、CustomImageView を使用するように指定します。
パッケージ名+クラス名で指定します。
<com.itstudy365.lesson.CustomImageView android:id="@+id/enemy_image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingTop="40dp" android:layout_gravity="center" app:srcCompat="@drawable/imagefile"/>
アクティビィティ側において、CustomImageView の型でインスタンスを生成するようにします。
private val image: CustomImageView = this.findViewById(R.id.enemy_image)
以上で警告が表示されなくなりました。