Android Java转Kotlin后OnItemClickListener报错求助
解决Java转Kotlin后OnItemClickListener接口实现冲突问题
你遇到的编译错误是由于重复实现了存在继承关系的接口导致的,下面给你具体的解决思路和优化方案:
错误根源
在Android体系中,ListView.OnItemClickListener本身就是AdapterView.OnItemClickListener的子接口。Java允许同时声明实现这两个接口,但Kotlin对接口实现的冗余性检查更严格,不允许重复实现存在继承关系的接口,因此触发了编译报错。
快速修复:删除冗余接口声明
只需要保留其中一个接口实现即可,推荐选择更通用的AdapterView.OnItemClickListener(或者保留ListView.OnItemClickListener也可,二选一即可)。修改后的DrawerItemClickListener代码如下:
private inner class DrawerItemClickListener : AdapterView.OnItemClickListener { override fun onItemClick(parent: AdapterView<*>, view: View, position: Int, id: Long) { selectItem(position) } }
进阶优化:用Lambda替代内部类(更贴合Kotlin风格)
在Kotlin中,我们可以直接用Lambda表达式替代这种简单的内部类实现,让代码更简洁清爽:
将原来的:
mDrawerList!!.setOnItemClickListener(DrawerItemClickListener())
替换为:
mDrawerList!!.setOnItemClickListener { _, _, position, _ -> selectItem(position) }
这样你甚至可以直接删掉DrawerItemClickListener这个内部类,减少不必要的代码嵌套。
内容的提问来源于stack exchange,提问作者PRAVAS DAS
相关产品推荐
相关产品推荐

