是否可以在 Android 中为 SeekBar 或 ProgressBar 使用数据绑定(bind)?我有这个数据元素:
<data>
<variable
name="foo"
type="com.example.Foo" />
</data>
如果我在 TextField 中引用变量 foo.bar(它是一个 int),它会按预期工作:
<TextView
android:text="@{String.valueOf(foo.bar)}"
[...]
我尝试做的是这样的:
<SeekBar
android:progress="@{foo.bar}"
[...]
但是没有被识别。 (只要我在引号之间写了一个“@”,它就会在编辑器中变红)。是否有另一种数据绑定(bind)方式?
最佳答案
要让 TextView 在 SeekBar 更改时更新,请通过 android:onProgressChanged
属性绑定(bind)到进度更改。这需要模型中带有 SeekBarBindingAdapter.OnProgressChanged
签名的公共(public)方法:
查看
<TextView
android:text="{@model.seekBarValue} />
<SeekBar
android:onProgressChanged="@{model.onValueChanged}" />
型号
public class Model {
public ObservableField<String> seekBarValue = new ObservableField<>("");
public void onValueChanged(SeekBar seekBar, int progresValue, boolean fromUser) {
seekBarValue.set(progresValue + "");
}
}
一般来说,我建议您查看所有为数据绑定(bind)制作的适配器类的源代码。例如,如果您在 Android Studio 中导航到文件 SeekBarBindingAdapter.java
(菜单 Navigate>File),您将了解可以通过那里的适配器绑定(bind)到的所有事件方法。此特定功能可用是因为 Google 实现了以下适配器:
@BindingAdapter("android:onProgressChanged")
public static void setListener(SeekBar view, OnProgressChanged listener) {
setListener(view, null, null, listener);
}
关于android - 我可以在 Android 中对 ProgressBar 进行数据绑定(bind)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31360484/