我想在
XML中建立ProgressBar和WebView之间的关系:
<ProgressBar android:id="@+id/progressBar"/> <WebView android:id="@+id/wvb_webView" app:attachedProgressBar="@{@id/progressBar}"/>
使用此代码,我可以创建一个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); }
这有效,但让我觉得我必须调用findViewById.有没有什么方法可以重构XML和BindingAdapter直接引用ProgressBar作为输入而不是@IdRes int?
解决方法
而不是id,直接在BindingAdapter中传递ProgressBar
@BindingAdapter({"app:attachedProgressBar"}) public static void setAttachedProgressBar(WebView webView,ProgressBar progBar) { wireStuff(webView,progBar); }
XML代码:
<ProgressBar android:id="@+id/progressBar"/> <WebView android:id="@+id/wvb_webView" app:attachedProgressBar="@{progressBar}"/>