Android的Kotlin错误:“返回类型是”单位“这不是被覆盖的子类型”

我试图弹出一个警告框询问用户,如果他想要从ListView中显示的ArrayList中删除一个值,只要他试图长时间点击它们中的一个

mainListView.setLongClickable(true) mainListView.setOnItemLongClickListener(object: AdapterView.OnItemLongClickListener { override fun onItemLongClick(parent: AdapterView<*>, view: View, position:Int, id:Long) { val alertDialog = AlertDialog.Builder(this@listV) alertDialog.setTitle("Would you like to delete this ?") alertDialog.setPositiveButton("Yes") { dialog, whichButton -> mobileArray.removeAt(position);listAdapter.notifyDataSetChanged() } alertDialog.setNegativeButton("Cancel", { dialog, which -> }) alertDialog.create() alertDialog.show()}}) 

但OnItemLongClick函数是错误的

返回类型是“单元”,它不是重写的子类型
public abstract fun onItemLongClick(…):在android.widget.adapterView.OnItemLongClickListener中定义的布尔值

我很困惑,因为我使用几乎相同的代码为一个简单的“onItemClick”,它工作正常

onItemClickonItemLongClick的签名是不同的(在API中,这是一个奇怪的不一致):

 void onItemClick(AdapterView<?> parent, View view, int position, long id) boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) 

后者返回一个boolean值,指示事件是否被侦听器使用。 如果这是true ,其他监听器不会被调用这个事件。

所以你想要做的是这样的:

 override fun onItemLongClick(parent: AdapterView<*>, view: View, position: Int, id: Long): Boolean { // alert dialog code return true }