我无法通过数据绑定更新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.progress
值current
的更新。这样,当变量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);
。但事实并非如此。
答案 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);