Ligação de dados do Android: “Referências de método usando '.' está obsoleto "
Ao usar a ligação de dados no meu aplicativo, recebo o seguinte aviso ao compilar:
Warning:Method references using '.' is deprecated. Instead of 'handler.onItemClick', use 'handler::onItemClick'
Por favor, veja meu XML abaixo.
<?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>
Observe o: da declaração condicional
Mensagem bastante direta, até eu mudar o '.' para '::'.
android:onClick="@{!active ? handler::onItemClick : null}"
Como o onItemClick está dentro de uma instrução condicional, parece interpretar o primeiro dos dois :: 's como a instrução' else 'da condição. No segundo ':', recebo o erro:
<expr> expected, got ':'
EDIT: Como o @CommonsWare sugeriu nos comentários, invertendo a declaração para"@{active ? null : handler::onItemClick}"
também não ajuda, um erro semelhante é mostrado (ver comentários)
EDIT2: Aparentemente, ao remover a instrução condicional, ficar com"@{handler::onItemClick}"
, ainda dá um erro:'!=', '%', '*', '+', ',', '-', '.', '/', <, <<, <=, '==', '>', '>=', '>>', '>>>' or '[' expected, got ':'
Usando a notação de ponto, ainda dá um aviso ao compilar
Existe alguma maneira de escapar desses :: 's, para que sejam interpretados corretamente?