我正在使用自定义组件进行数据绑定,并且在尝试将字符串绑定到xml中的值时遇到了困难。
这是xml中的xml组件。问题是用progressText字符串替换了动态变量。我得到
尝试编译xml时出现找不到
接受参数类型'java.lang.String'
错误。
<com.mycompany.CircleProgressBar
xmlns:cpb="http://schemas.android.com/apk/res-auto"
android:id="@+id/progressWheel"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_centerInParent="true"
android:layout_margin="10dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
cpb:progress="@{viewmodel.progress}"
cpb:progressColor="@color/colorPrimary"
cpb:backgroundColor="@color/gray"
cpb:backgroundWidth="10"
cpb:textSize="10sp"
cpb:differenceInTextSizeInLines="10"
cpb:roundedCorners="true"
cpb:progressText="@{@string/work_package_percent_complete(viewmodel.progress)}"
cpb:spaceBetweenLines="5"
cpb:maxValue="100"
cpb:progressTextColor="@color/colorPrimary" />
这是我声明在CircleProgressBar中使用的变量的方式:
@BindingAdapter("progressText")
fun setTextView(view: CircleProgressBar, value: String) {
if (this::ta.isInitialized) {
this.text = ta.getString(R.styleable.CircleProgressBar_progressText) as String
} else {
this.text = value
}
view.invalidate()
}
当我尝试在xml文件的顶部为String进行导入语句时,我得到的重复信息是已经声明了String。如果我只输入纯文本而不替换字符串,则一切正常。
答案 0 :(得分:0)
BindingAdapter
似乎经常被滥用,因为它对于简单的绑定来说是过大的杀伤力。想法是生成这些,而不是对其进行编程-并且具有预期名称的String
getter / setter就足够了。为了公开预期的方法,只需调用这些方法:
setProgressText(value: String)
getProgressText()
当CircleProgressBar
是一个字段时,不必将其传递到方法中,以保留预期的方法签名,而对于它的显式抱怨则缺少它。它甚至不必是视图模型中的一个字段,因为该模型不应依赖于视图。