在Kotlin中设置Android监听器 - 在lambdas中使用return

时间:2017-08-02 09:05:40

标签: android lambda kotlin listener

考虑这个监听器代码:

        expandable_list.setOnChildClickListener { expandableListView, view, groupPosition, childPosition, l ->
        Toast.makeText(
                applicationContext,
                listDataHeader[groupPosition]
                        + " : "
                        + listDataChild[listDataHeader[groupPosition]]!![childPosition],
                Toast.LENGTH_SHORT).show()
    return false}

它不会工作,我得到了#34;这里不允许返回"错误形式IDE。我已经搜索了一下,事实证明显式返回在lambdas中不起作用,但我尝试使用的方法的签名是:

public final fun setOnChildClickListener(onChildClickListener:((ExpandableListView!, View!, Int, Int, Long) -> Boolean)! : Unit

我的解决方法是在一个单独的函数中定义我的侦听器逻辑,该函数返回如下所示的布尔值:

    private fun myBooleanReturningFun(): Boolean {
    Toast.makeText(
            applicationContext,
            "I work from here",
            Toast.LENGTH_SHORT).show()
    return false
}

然后在我的听众中调用它:

expandable_list.setOnChildClickListener { expandableListView, view, groupPosition, childPosition, l ->
            myBooleanReturningFun()
        }

但这是正确的还是最Kotlin方式呢?如何在不定义返回布尔值的单独函数的情况下将侦听器代码更改为工作?

1 个答案:

答案 0 :(得分:2)

这样做,没有返回单词

expandable_list.setOnChildClickListener { expandableListView, view, groupPosition, childPosition, l ->
    Toast.makeText(
            applicationContext,
            listDataHeader[groupPosition]
                    + " : "
                    + listDataChild[listDataHeader[groupPosition]]!![childPosition],
            Toast.LENGTH_SHORT).show()
    false}