Привязка данных, передавая элемент XML со специальными символами - PullRequest
0 голосов
/ 19 декабря 2018

Рассмотрим следующий связующий адаптер

@BindingAdapter({"pager"})
public static void bindViewPagerTabs(final TabLayout view, final ViewPager pagerView)
{
    view.setupWithViewPager(pagerView, true);
}

, а значение в xml:

        <com.google.android.material.tabs.TabLayout
            android:id="@+id/card_control_tab_layout"
            style="@style/tab_in_toolbar_style"
            android:background="@color/colorPrimary"
            app:tabGravity="fill"
            app:pager="@{(pager_r)}"
            app:tabMode="scrollable" />

Дает следующую ошибку:

error: cannot find symbol class ActivityCardControlBindingImpl

Но если яизменил идентификатор пейджера на что-либо без подчеркивания или каких-либо специальных символов, таких как @+id/pager, это работает отлично, какая-либо веская причина?

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Я нашел тот же ответ, что и у Яноша Пельцера, но немного больше объяснений здесь

Невозможно сослаться на другой идентификатор представления в привязке данных Android

0 голосов
/ 20 декабря 2018

Работает, если вы пишете app:pager="@{(pagerR)}" вместо app:pager="@{(pager_r)}".Кроме того, вам не нужны скобки, так что вы можете просто написать app:pager="@{pagerR}".

РЕДАКТИРОВАТЬ:

Но если я изменил идентификатор пейджера на что-либо без подчеркивания или каких-либо специальныхсимволы, такие как @ + id / pager, он работает отлично, есть веская причина?

Я не знаю о других специальных символах, но когда вы используете подчеркивание в вашем представлении, идентифицирует представление в виде змеи, например"pager_r" преобразуется путем привязки данных к переменным типа верблюдов, таких как "pagerR".Поэтому, как говорится в моем исходном ответе, если вы используете @ + id / pager_r, вы можете использовать переменную pagerR.

...