我有以下两个定义。
第一个作为扩展函数,允许设置View
可见,并使用第二个参数将其设置为不可见或不可见。
fun View.setVisible(visible: Boolean, goneWhenVisibleFalse: Boolean) {
visibility = when {
visible -> View.VISIBLE
goneWhenVisibleFalse -> View.GONE
else -> View.INVISIBLE
}
}
这里的第二个,作为使用上面第一个的扩展属性。
var View.visible: Boolean
get() = visibility == View.VISIBLE
set(value) {
setVisible(value, true)
}
直到这里才复杂。代码编译并正确启动应用程序。但我得到一个黑屏,logcat没有错误,没有任何迹象。
过了一会儿,我改变第一个函数的签名以接收第二个参数,默认为true:
fun View.setVisible(visible: Boolean, goneWhenVisibleFalse: Boolean
的 = true
)
然后它正常工作。问题是:为什么会这样?我挖了字节码。但看起来没有重复签名,两种情况下参数的数量都不同。
也许是kotlin的错误?我使用的是kotlin插件v1.2.30
答案 0 :(得分:0)
使用此:
View.setVisible(visible: Boolean, goneWhenInvisible: Boolean = false) {
visibility = if (visible) View.VISIBLE
else if (goneWhenInvisible) View.GONE
else View.INVISIBLE
}