如何使用数据绑定更新进度条百分比

时间:2019-02-12 06:49:27

标签: android data-binding android-databinding

我无法通过数据绑定更新ProgressBar进度。

这就是我在做什么-

  • 我有一个用于保存ProgressBar当前进度的模型。

ModelProgress.java

public class ModelProgress extends BaseObservable {
    private int total;
    private int current;

    public void setCurrent(int current) {
        this.current = current;
        notifyPropertyChanged(BR.progress);
    }

    @Bindable
    public int getProgress() {
        return (current / total) * 100;
    }
}

请注意:我已完成getProgress() @Bindable的发布,并通知了BR.progresscurrent的更新。这样,当变量BR.progress发生更改时,附加到current的UI就会更新。

在XML中,我尝试将ProgressBar附加到变量progress

<ProgressBar
    style="@style/Widget.AppCompat.ProgressBar.Horizontal"
    android:progress="@{model.progress}"
    tools:progress="50" />

问题

一切都为我准备。现在,当我调用setCurrent()方法时,它应该反映在UI上。像binding.getModel().setCurrent(50);。但事实并非如此。

1 个答案:

答案 0 :(得分:1)

这应该起作用,除非(current / total) * 100每次都不返回零。 该方法返回0,因为将两个整数值相除时,如果分母大于分子,则返回0。检查the explained answer。您可以更改getProgress()方法的实现。

public class ModelProgress extends BaseObservable {
private int total=100;
private int current;
public void setCurrent(int current) {
    this.current = current;
    notifyPropertyChanged(BR.progress);
}
@Bindable
public int getProgress() {
    return current * 100 / total;
}
}

还请检查您必须首先初始化total。并检查您如何计算进度。   确保您不要忘记设置模型。

modelProgress=new ModelProgress();
mainBinding.setModel(modelProgress);