在我的应用程序中使用数据绑定(bind)时,在编译时收到以下警告:Warning:Method references using '.' is deprecated. Instead of 'handler.onItemClick', use 'handler::onItemClick'
请在下面查看我的XML。
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable name="handler" type="ClickHandler"/>
<variable name="active" type="boolean"/>
</data>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:onClick="@{!active ? handler.onItemClick : null}"
android:background="@color/backgroundWhite"/>
</RelativeLayout>
</layout>
请注意条件语句中的:
信息非常简单明了,直到我更改“。”为止。到 '::'。
android:onClick="@{!active ? handler::onItemClick : null}"
由于onItemClick在条件语句中,因此它似乎将两个::中的第一个解释为条件的“其他”语句。在第二个':'上,我得到了错误:
<expr> expected, got ':'
编辑:如@CommonsWare在注释中建议,将语句反转为
"@{active ? null : handler::onItemClick}"
也无济于事,会显示类似的错误(请参阅评论)EDIT2:显然,当剥离条件语句时,保留
"@{handler::onItemClick}"
,它仍然会给出错误:'!=', '%', '*', '+', ',', '-', '.', '/', <, <<, <=, '==', '>', '>=', '>>', '>>>' or '[' expected, got ':'
使用点符号,在编译时仍会给出警告是否有任何方法可以逃避这些::,所以可以正确解释它吗?
最佳答案
我的猜测是显示弃用警告,因为Android数据绑定(bind)当前与Java 8不完全兼容。
将以下内容放入您项目的build.gradle
文件中,将隐藏所提及的警告。
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
}
除非您在项目中使用Java 8功能。
关于android - Android数据绑定(bind): “Method references using ' .' is deprecated” ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37323648/