Enlace de datos de Android: "Referencias de métodos con '.' es obsoleto"
Cuando uso el enlace de datos en mi aplicación, recibo la siguiente advertencia al compilar:
Warning:Method references using '.' is deprecated. Instead of 'handler.onItemClick', use 'handler::onItemClick'
Por favor vea mi XML a continuación.
<?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>
Tenga en cuenta el: de la declaración condicional
Mensaje bastante directo, hasta que cambie el '.' a '::'.
android:onClick="@{!active ? handler::onItemClick : null}"
Dado que onItemClick está dentro de una declaración condicional, parece interpretar el primero de los dos :: 's como la declaración' else 'de la condición. En el segundo ':', aparece el error:
<expr> expected, got ':'
EDITAR: como @CommonsWare sugirió en los comentarios, invirtiendo la declaración para"@{active ? null : handler::onItemClick}"
tampoco ayuda, se muestra un error similar (ver comentarios)
EDIT2: Aparentemente, al eliminar la declaración condicional, quedando con"@{handler::onItemClick}"
, todavía da un error:'!=', '%', '*', '+', ',', '-', '.', '/', <, <<, <=, '==', '>', '>=', '>>', '>>>' or '[' expected, got ':'
Usando la notación de puntos, todavía da una advertencia al compilar
¿Hay alguna forma de escapar de estos :: 's, por lo que se interpreta correctamente?