admin管理员组文章数量:1024074
Any idea how to fix this horrible code so that a single touchlistener can handle all the clicks?
// Devices
val devices = DeviceDAO(context).getDevicesByType(2)
adapter = ShipDevicesAdapter(devices)
binding.shipDevicesRecyclerView.layoutManager = LinearLayoutManager(context)
binding.shipDevicesRecyclerView.adapter = adapter
var engine = 0
binding.engineLayout.engineView1.setOnClickListener {
binding.shipDevicesRecyclerView.visibility = View.VISIBLE
engine = 1
}
binding.engineLayout.engineView2.setOnClickListener {
binding.shipDevicesRecyclerView.visibility = View.VISIBLE
engine = 2
}
binding.engineLayout.engineView3.setOnClickListener {
binding.shipDevicesRecyclerView.visibility = View.VISIBLE
engine = 3
}
binding.engineLayout.engineView4.setOnClickListener {
binding.shipDevicesRecyclerView.visibility = View.VISIBLE
engine = 4
}
adapter.setOnItemClickListener {
val resId = Game.getResId(it.image, R.drawable::class.java)
when(engine){
1 -> binding.engineLayout.engineView1.setImageResource(resId)
2 -> binding.engineLayout.engineView2.setImageResource(resId)
3 -> binding.engineLayout.engineView3.setImageResource(resId)
4 -> binding.engineLayout.engineView4.setImageResource(resId)
}
binding.shipDevicesRecyclerView.visibility = View.GONE
}
I have tried to collect the view id with view.id, also with view.current focus, also with the R.id.engineView resource, but I don't know how to collect it. The code is in a fragment, not in an activity.
Any idea how to fix this horrible code so that a single touchlistener can handle all the clicks?
// Devices
val devices = DeviceDAO(context).getDevicesByType(2)
adapter = ShipDevicesAdapter(devices)
binding.shipDevicesRecyclerView.layoutManager = LinearLayoutManager(context)
binding.shipDevicesRecyclerView.adapter = adapter
var engine = 0
binding.engineLayout.engineView1.setOnClickListener {
binding.shipDevicesRecyclerView.visibility = View.VISIBLE
engine = 1
}
binding.engineLayout.engineView2.setOnClickListener {
binding.shipDevicesRecyclerView.visibility = View.VISIBLE
engine = 2
}
binding.engineLayout.engineView3.setOnClickListener {
binding.shipDevicesRecyclerView.visibility = View.VISIBLE
engine = 3
}
binding.engineLayout.engineView4.setOnClickListener {
binding.shipDevicesRecyclerView.visibility = View.VISIBLE
engine = 4
}
adapter.setOnItemClickListener {
val resId = Game.getResId(it.image, R.drawable::class.java)
when(engine){
1 -> binding.engineLayout.engineView1.setImageResource(resId)
2 -> binding.engineLayout.engineView2.setImageResource(resId)
3 -> binding.engineLayout.engineView3.setImageResource(resId)
4 -> binding.engineLayout.engineView4.setImageResource(resId)
}
binding.shipDevicesRecyclerView.visibility = View.GONE
}
I have tried to collect the view id with view.id, also with view.current focus, also with the R.id.engineView resource, but I don't know how to collect it. The code is in a fragment, not in an activity.
Share Improve this question edited Nov 19, 2024 at 7:12 Delek asked Nov 18, 2024 at 21:23 DelekDelek 234 bronze badges1 Answer
Reset to default 0I create an array with all the views and then return the selected view, I don't know if it's the most correct but it seems to work
private lateinit var v: ImageView
// Code inside onCreateView
val devices = DeviceDAO(context).getDevicesByTechLearned()
adapter = DevicesAdapter(devices, context)
binding.shipDevicesRecyclerView.layoutManager = LinearLayoutManager(context)
binding.shipDevicesRecyclerView.adapter = adapter
viewListener()
adapter.setOnItemClickListener {
val resId = Game.getResId(it.image, R.drawable::class.java)
v.setImageResource(resId)
binding.shipDevicesRecyclerView.visibility = View.GONE
}
private fun viewListener() {
val engineView1 = binding.devicesLayout.engineView1
val engineView2 = binding.devicesLayout.engineView2
val engineView3 = binding.devicesLayout.engineView3
val engineView4 = binding.devicesLayout.engineView4
val engineView = arrayListOf(
engineView1, engineView2, engineView3, engineView4,
)
engineView.forEach { v ->
v.setOnClickListener {
viewSelected(v)
}
}
}
private fun viewSelected(view: ImageView): ImageView {
binding.shipDevicesRecyclerView.visibility = View.VISIBLE
v = view
return v
}
Any idea how to fix this horrible code so that a single touchlistener can handle all the clicks?
// Devices
val devices = DeviceDAO(context).getDevicesByType(2)
adapter = ShipDevicesAdapter(devices)
binding.shipDevicesRecyclerView.layoutManager = LinearLayoutManager(context)
binding.shipDevicesRecyclerView.adapter = adapter
var engine = 0
binding.engineLayout.engineView1.setOnClickListener {
binding.shipDevicesRecyclerView.visibility = View.VISIBLE
engine = 1
}
binding.engineLayout.engineView2.setOnClickListener {
binding.shipDevicesRecyclerView.visibility = View.VISIBLE
engine = 2
}
binding.engineLayout.engineView3.setOnClickListener {
binding.shipDevicesRecyclerView.visibility = View.VISIBLE
engine = 3
}
binding.engineLayout.engineView4.setOnClickListener {
binding.shipDevicesRecyclerView.visibility = View.VISIBLE
engine = 4
}
adapter.setOnItemClickListener {
val resId = Game.getResId(it.image, R.drawable::class.java)
when(engine){
1 -> binding.engineLayout.engineView1.setImageResource(resId)
2 -> binding.engineLayout.engineView2.setImageResource(resId)
3 -> binding.engineLayout.engineView3.setImageResource(resId)
4 -> binding.engineLayout.engineView4.setImageResource(resId)
}
binding.shipDevicesRecyclerView.visibility = View.GONE
}
I have tried to collect the view id with view.id, also with view.current focus, also with the R.id.engineView resource, but I don't know how to collect it. The code is in a fragment, not in an activity.
Any idea how to fix this horrible code so that a single touchlistener can handle all the clicks?
// Devices
val devices = DeviceDAO(context).getDevicesByType(2)
adapter = ShipDevicesAdapter(devices)
binding.shipDevicesRecyclerView.layoutManager = LinearLayoutManager(context)
binding.shipDevicesRecyclerView.adapter = adapter
var engine = 0
binding.engineLayout.engineView1.setOnClickListener {
binding.shipDevicesRecyclerView.visibility = View.VISIBLE
engine = 1
}
binding.engineLayout.engineView2.setOnClickListener {
binding.shipDevicesRecyclerView.visibility = View.VISIBLE
engine = 2
}
binding.engineLayout.engineView3.setOnClickListener {
binding.shipDevicesRecyclerView.visibility = View.VISIBLE
engine = 3
}
binding.engineLayout.engineView4.setOnClickListener {
binding.shipDevicesRecyclerView.visibility = View.VISIBLE
engine = 4
}
adapter.setOnItemClickListener {
val resId = Game.getResId(it.image, R.drawable::class.java)
when(engine){
1 -> binding.engineLayout.engineView1.setImageResource(resId)
2 -> binding.engineLayout.engineView2.setImageResource(resId)
3 -> binding.engineLayout.engineView3.setImageResource(resId)
4 -> binding.engineLayout.engineView4.setImageResource(resId)
}
binding.shipDevicesRecyclerView.visibility = View.GONE
}
I have tried to collect the view id with view.id, also with view.current focus, also with the R.id.engineView resource, but I don't know how to collect it. The code is in a fragment, not in an activity.
Share Improve this question edited Nov 19, 2024 at 7:12 Delek asked Nov 18, 2024 at 21:23 DelekDelek 234 bronze badges1 Answer
Reset to default 0I create an array with all the views and then return the selected view, I don't know if it's the most correct but it seems to work
private lateinit var v: ImageView
// Code inside onCreateView
val devices = DeviceDAO(context).getDevicesByTechLearned()
adapter = DevicesAdapter(devices, context)
binding.shipDevicesRecyclerView.layoutManager = LinearLayoutManager(context)
binding.shipDevicesRecyclerView.adapter = adapter
viewListener()
adapter.setOnItemClickListener {
val resId = Game.getResId(it.image, R.drawable::class.java)
v.setImageResource(resId)
binding.shipDevicesRecyclerView.visibility = View.GONE
}
private fun viewListener() {
val engineView1 = binding.devicesLayout.engineView1
val engineView2 = binding.devicesLayout.engineView2
val engineView3 = binding.devicesLayout.engineView3
val engineView4 = binding.devicesLayout.engineView4
val engineView = arrayListOf(
engineView1, engineView2, engineView3, engineView4,
)
engineView.forEach { v ->
v.setOnClickListener {
viewSelected(v)
}
}
}
private fun viewSelected(view: ImageView): ImageView {
binding.shipDevicesRecyclerView.visibility = View.VISIBLE
v = view
return v
}
本文标签: kotlinManage multiples views with a single listenerStack Overflow
版权声明:本文标题:kotlin - Manage multiples views with a single listener - Stack Overflow 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://it.en369.cn/questions/1745593387a2158019.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论