【问题标题】:Android Kotlin error : "return type is 'unit' which is not a subtype of overridden"Android Kotlin 错误:“返回类型是‘单元’,它不是被覆盖的子类型”
【发布时间】:2017-07-09 07:28:41
【问题描述】:

我正在尝试弹出一个警告框,询问用户是否要从 ArrayList 中删除一个值,该值在他尝试长按其中一个时显示在 ListView 中

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”使用了几乎相同的代码,而且效果很好

【问题讨论】:

  • 你的 {dialog, which -> ...} 映射到什么?我的意思是“取消”
  • 没什么,它会退出对话框提醒

标签: android kotlin


【解决方案1】:

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
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-20
    • 2023-01-10
    相关资源
    最近更新 更多