数据绑定传递带有特殊字符的xml元素

时间:2018-12-19 14:26:31

标签: android data-binding android-databinding android-binding-adapter

考虑以下bindingAdapter

@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更改为没有下划线或@+id/pager之类的任何特殊字符的任何内容,它就可以正常工作,是否有任何合理的理由?

2 个答案:

答案 0 :(得分:1)

如果您写app:pager="@{(pagerR)}"而不是app:pager="@{(pager_r)}",则可以使用。另外,您也不需要括号,因此您可以只写app:pager="@{pagerR}"

编辑:

  

但是,如果我将寻呼机ID更改为没有下划线或任何特殊字符(如@ + id / pager)的任何内容,则它可以正常工作,是否有任何正当理由?

我不知道其他特殊字符,但是当您在视图ID中使用下划线时,通过数据绑定将诸如“ pager_r”之类的蛇形视图ID通过数据绑定转换为“诸如pagerR”之类的驼峰变量。因此,正如我最初的回答所述,如果您使用@ + id / pager_r,则可以使用变量pagerR。

答案 1 :(得分:0)

我在这里找到了与Janosch Pelzer相同的答案,但这里有更多的爆炸声

Cannot refer to other View ID in Android data binding