在我的应用程序中使用数据绑定(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/

10-09 01:29