代码之家  ›  专栏  ›  技术社区  ›  Khemraj Sharma

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

  •  0
  • Khemraj Sharma  · 技术社区  · 6 年前

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

    这就是我要做的-

    • 我有一个保持进度条当前进度的模型。

    模型进度.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 . 因此,用户界面附加到 进展 变量更改时更新 现在的 .

    在XML中,我试图附加 ProgressBar 随变量 progress .

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

    问题

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

    1 回复  |  直到 6 年前
        1
  •  1
  •   Khemraj Sharma    6 年前

    除非 (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);
    
    推荐文章