我可以在Android上将视图作为数据绑定BindingAdapter的输入吗?

Nil*_*zor 5 data-binding android android-databinding

我想在XML中建立一个ProgressBar和这样的WebView东西之间的关系:

    <ProgressBar
        android:id="@+id/progressBar"/>

    <WebView
        android:id="@+id/wvb_webView"
        app:attachedProgressBar="@{@id/progressBar}"/> 
Run Code Online (Sandbox Code Playgroud)

使用此代码,我可以创建一个BindingAdapter像这样的接线:

@BindingAdapter({"app:attachedProgressBar"})
public static void setAttachedProgressBar(WebView webView, @IdRes int progressBarId) {        
        ProgressBar progBar = (ProgressBar) DataBindingUtil.getBinding(webView).getRoot().findViewById(progressBarId);
        wireStuff(webView, progBar); 
}
Run Code Online (Sandbox Code Playgroud)

这有效,但我不得不打电话给我findViewById.有没有什么办法可以重构XML和BindingAdapter直接引用ProgressBaras输入而不是@IdRes int

Rav*_*avi 12

而不是id,直接传入ProgressBar你的BindingAdapter

@BindingAdapter({"app:attachedProgressBar"})
public static void setAttachedProgressBar(WebView webView, ProgressBar progBar) {        
    wireStuff(webView, progBar); 
}
Run Code Online (Sandbox Code Playgroud)

XML代码:

<ProgressBar
    android:id="@+id/progressBar"/>

<WebView
    android:id="@+id/wvb_webView"
    app:attachedProgressBar="@{progressBar}"/> 
Run Code Online (Sandbox Code Playgroud)

  • 如果它是`wv_progressBar`而不是你需要通过`wvProgressBar` (8认同)
  • 是的,这就是我告诉我的应该是`app:attachedProgressBar =“ @ {wvProgressBar}”`。由于DataBinding将删除下划线并以驼峰式大写字母更新变量名称。 (3认同)
  • 谢谢.我有相同的错误,但它由`content`从`content_`修复为`content`. (2认同)