님이 원하시는 동작이 이미지 클릭에 반응하는 것이므로 setOnTouchListener 대신 setOnClickListener 를 사용하세요.
그리고 이미지를 클릭했을 때 해당 이미지에 대한 정보를 가지고 있어야 일치하는 정보를 뿌려줄 수 있겠죠. 그리고 이미지뷰 안에 해당 정보를 보관하지 마시고 별도의 데이터 구조에 저장하신 후 이 걸 이미지뷰에 맵핑해서 사용하는 것이 의존성을 줄이고 추후에 이미지가 아니라 버튼이나 텍스트뷰 같은 걸로 뷰가 바뀔 경우에 코드의 변경사항이 적어지므로 훨씬 유연한 코드가 된다고 할 수 있습니다.
data class ImageDetail(
private val id: Int,
private val title: String,
private val description: String,
@DrawableRes private val source: Int
)
// Activity
private val imageDetails = arrayListOf<ImageDetail>();
override fun onCreate(...) {
super.onCreate(...)
loadAndUpdateImages()
}
private fun loadAndUpdateImages() {
loadImageData()
updateImages()
}
private void loadImageData() {
imageDetails.clear();
imageDetails.add(ImageDetail(id = R.id.ivDraw, title = "Title1", description = "Description1", source = R.drawable.drawableId1));
// 필요한 ImageDetail을 추가;
}
private val imageIds = hashMapOf<Int, ImageView>()
private fun updateImages() {
imageDetails.forEach { imageDetail ->
imageIds[imageDetails.id] ?: findViewId<ImageView>(imageDetails.id).also { view ->
imageIds[imageDetails.id] = view
view.setImageResources(imageDetail.source);
view.setOnClickListener {
showToastMessage(imageDetail)
}
}
}
}
private val toastView by lazy { View.inflate(this@MainActivity,R.layout.toast1, null) }
private val toastText by lazy { toastView.findViewById<TextView>(R.id.drName) }
private fun showToastMessage(imageDetail: ImageDetail) {
Toast(this@MainActivity).also { toast ->
toastText.setText(imageDetail.title)
toast.view = toastView
toast.show()
}
}