是否可以在 Android 中对 SeekBar 或 ProgressBar 使用数据绑定?我有这个数据元素:
<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}"
[...]
但它没有被认可。 (当我在引号之间写了一个“@”时,它在编辑器中变成红色)。还有另一种数据绑定方式吗?
要让 TextView 在 SeekBar 更改时更新,请通过以下方式绑定到进度更改android:onProgressChanged
属性。这需要模型中有一个公共方法,其签名为SeekBarBindingAdapter.OnProgressChanged
:
View
<TextView
android:text="{@model.seekBarValue} />
<SeekBar
android:onProgressChanged="@{model.onValueChanged}" />
Model
public class Model {
public ObservableField<String> seekBarValue = new ObservableField<>("");
public void onValueChanged(SeekBar seekBar, int progresValue, boolean fromUser) {
seekBarValue.set(progresValue + "");
}
}
一般来说,我建议您查看为数据绑定创建的所有适配器类的源代码。例如,如果您导航到该文件SeekBarBindingAdapter.java
在 Android Studio 中(菜单“导航”>“文件”),您将了解可以通过适配器绑定的所有事件方法。此特定功能可用是因为 Google 实现了以下适配器:
@BindingAdapter("android:onProgressChanged")
public static void setListener(SeekBar view, OnProgressChanged listener) {
setListener(view, null, null, listener);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)