我正在创建自定义视图。它具有自己的属性:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="RatingView">
...
<attr name="ratingView_progress_value" format="float" />
...
</declare-styleable>
</resources>
在数据绑定过程中,我调用一个返回Float的方法,并将其设置到xml中的
ratingView_progress_value
。object DataBindingUtils {
@JvmStatic
fun getScaledRating(rating: Float, base: Float): Float {
return rating / base
}
}
这是我的问题:
如果我输入
.4
,这段代码能够正常工作:<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="model"
type="com.example.app.model.Model" />
<import type="com.example.app.utils.DataBindingUtils" />
</data>
...
<com.example.app.widgets.RatingView
...
app:ratingView_progress_value=".4" />
...
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
但是使用getScaledRating()
——这部分代码不起作用:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="model"
type="com.example.app.model.Model" />
<import type="com.example.app.utils.DataBindingUtils" />
</data>
...
<com.example.app.widgets.RatingView
...
app:ratingView_progress_value="@{(DataBindingUtils.getScaledRating(model.rating, 10f))}" />
...
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
我遇到了这样的典型错误:
cannot find symbol class FragmentListItemBindingImpl
java.lang.reflect.InvocationTargetException (no error message)
Cannot find a setter for that accepts parameter type 'float'
我在另一个参数中使用了 @{(DataBindingUtils.getScaledRating(model.rating, .4))}
,即 android:alpha="@{(DataBindingUtils.getScaledRating(model.rating, .4))}"
,但没有出现任何错误。
我不知道编译器所说的setter是什么。是否有人遇到过这样的问题?
RatingView
中,您是否有一个公共的ratingView_progress_value
Setter? - ADM