android - 我可以在 Android 中对 ProgressBar 进行数据绑定(bind)吗?

标签 android data-binding android-seekbar

是否可以在 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/

相关文章:

grails - 如何将 id 列表绑定(bind)到 grails 中的命令对象?

javascript - Knockout.JS 绑定(bind)处理程序 moment.js

Angular Chrome Api 数据绑定(bind)不起作用

android - 带有搜索栏的左侧文本不对齐

android - 为什么我的 SeekBar 没有更新?

android - Android L 中是否有 Snackbars 的代码,或者我们是否应该自己实现它们?

android - 单击事件不适用于 android 中的线性布局

android - Lollipop API21 上的自定义搜索栏拇指不透明

android - 调用 System.loadLibrary 时未调用 onJNILoad

Android服务多线程设计