【问题标题】:Data binding passing xml element with special characters数据绑定传递带有特殊字符的 xml 元素
【发布时间】:2018-12-19 14:26:30
【问题描述】:

考虑下面的 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)的任何内容,它可以完美运行,有什么正当理由吗?

【问题讨论】:

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


【解决方案1】:

如果你写app:pager="@{(pagerR)}"而不是app:pager="@{(pager_r)}",它会起作用。你也不需要括号,所以你可以写app:pager="@{pagerR}"

编辑:

但是,如果我将寻呼机 ID 更改为不带下划线或任何特殊字符(如 @+id/pager)的任何内容,它可以完美运行,有什么正当理由吗?

我不知道其他特殊字符,但是当您在视图 id 中使用下划线时,像“pager_r”这样的蛇形视图 id 会通过数据绑定转换为像“pagerR”这样的变量。所以正如我原来的回答所说,如果你使用 @+id/pager_r 你可以使用变量 pagerR。

【讨论】:

  • 这不是答案,这是问题的一部分!
  • 不,这不是你的问题的一部分:你写道,如果你使用 id @+id/pager 你可以使用变量 pager,但是你不能使用变量 pager_r 如果你使用id @+id/pager_r。我要告诉你的是,如果你使用 id @+id/pager_r,你可以使用变量 pagerR,因为 snake_case 视图 id 被数据绑定库转换为 camelCase 变量。我用这些信息编辑了我的答案。
【解决方案2】:

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

Cannot refer to other View ID in Android data binding

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-20
    • 2018-05-03
    • 2022-05-25
    • 2011-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-07
    相关资源
    最近更新 更多