При использовании привязки данных в моем приложении я получаю следующее предупреждение при компиляции:
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>
Обратите внимание на : из условного оператора
Довольно простое сообщение, пока я не изменю '.' to '::'.
android:onClick="@{!active ? handler::onItemClick : null}"
Так как onItemClick находится внутри условного оператора, он, кажется, интерпретирует первое из двух:: как условие else. На втором ":" я получаю сообщение об ошибке:
<expr> expected, got ':'
EDIT: как @CommonsWare, предлагаемая в комментариях, инвертирует утверждение "@{active ? null : handler::onItemClick}"
не помогает, аналогичная ошибка показана (см. комментарии)
EDIT2: По-видимому, при удалении условного оператора, оставаясь с "@{handler::onItemClick}"
, он все равно дает ошибку: '!=', '%', '*', '+', ',', '-', '.', '/', <, <<, <=, '==', '>', '>=', '>>', '>>>' or '[' expected, got ':'
Используя точечную нотацию, все равно выдает предупреждение при компиляции
Есть ли способ избежать этих::, так что это правильно интерпретируется?