【问题标题】:Adding variable automatically when checkbox is checked Android Studio选中复选框时自动添加变量 Android Studio
【发布时间】:2021-09-04 14:33:52
【问题描述】:

是否可以在按下复选框时自动进行算术计算?我想根据复选框顶部价格的选择添加总 harga(总价格)变化,并将它们与基本价格(产品价格)一起添加。

例如: 选中 CB Extra Ayam 和 CB Kepala 将增加 3000 + 4000 然后加上基本产品价格10000 所以总价是17000 当我不勾选CB Extra Ayam和CB Kepala等时,总价将回到10000

这是我的代码

if (Code.toUpperCase().matches((inMieAyam.toUpperCase()))){
            
    //set text topping
    CBTopping1.setText("Extra Ayam");
    CBTopping2.setText("Extra Tetelan Sapi");
    CBTopping3.setText("Cakar (2 pcs)");
    CBTopping4.setText("Kepala");
    CBTopping5.setText("Bakso Sapi");
    CBTopping6.setText("Telur Mata Sapi");
    CBTopping7.setText("Balungan Rica Ayam");
    CBTopping8.setText("Extra Sawi");
    CBTopping9.setText("Extra Acar");

    //hide remaining topping CB
    CBTopping10.setVisibility(View.GONE);

    //set price to variable
    Price1 = 3000;
    Price2 = 7000;
    Price3 = 4000;
    Price4 = 4000;
    Price5 = 3000;
    Price6 = 4000;
    Price7 = 4000;
    Price8 = 1000;
    Price9 = 1000;
    Price10 = 0;

    //set price topping
    TxtvToppingPrice1.setText("Rp."+Price1);
    TxtvToppingPrice2.setText("Rp."+Price2);
    TxtvToppingPrice3.setText("Rp."+Price3);
    TxtvToppingPrice4.setText("Rp."+Price4);
    TxtvToppingPrice5.setText("Rp."+Price5);
    TxtvToppingPrice6.setText("Rp."+Price6);
    TxtvToppingPrice7.setText("Rp."+Price7);
    TxtvToppingPrice8.setText("Rp."+Price8);
    TxtvToppingPrice9.setText("Rp."+Price9);


    //hide remaining topping price Txtv
    TxtvToppingPrice10.setVisibility(View.GONE);
    

    FinalPrice1 = 0;
    FinalPrice2 = 0;
    FinalPrice3 = 0;
    FinalPrice4 = 0;
    FinalPrice5 = 0;
    FinalPrice6 = 0;
    FinalPrice7 = 0;
    FinalPrice8 = 0;
    FinalPrice9 = 0;
    FinalPrice10 = 0;

    CBTopping1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked){
                FinalPrice1 = Price1;
            }
            else {
                FinalPrice1 = 0;
            }
        }
    });

    CBTopping2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked){
                FinalPrice2 = Price2;
            }
            else {
                FinalPrice2 = 0;
            }
        }
    });

    CBTopping3.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked){
                FinalPrice3 = Price3;
            }
            else {
                FinalPrice3 = 0;
            }
        }
    });

    CBTopping4.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked){
                FinalPrice4 = Price4;
            }
            else {
                FinalPrice4 = 0;
            }
        }
    });

    CBTopping5.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked){
                FinalPrice5 = Price5;
            }
            else {
                FinalPrice5 = 0;
            }
        }
    });

    CBTopping6.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked){
                FinalPrice6 = Price6;
            }
            else {
                FinalPrice6 = 0;
            }
        }
    });

    CBTopping7.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked){
                FinalPrice7 = Price7;
            }
            else {
                FinalPrice7 = 0;
            }
        }
    });

    CBTopping8.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked){
                FinalPrice8 = Price8;
            }
            else {
                FinalPrice8 = 0;
            }
        }
    });

    CBTopping9.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked){
                FinalPrice9 = Price9;
            }
            else {
                FinalPrice9 = 0;
            }
        }
    });


    FoodPrice1 = Integer.parseInt(Price);
    TotalFinalPrice = FoodPrice1 + FinalPrice1 + FinalPrice2 + FinalPrice3 +
            FinalPrice4 + FinalPrice5 + FinalPrice6 +
            FinalPrice7 + FinalPrice8 + FinalPrice9 ;

    TxtvTotalHarga.setText(Integer.toString(TotalFinalPrice));

}

编辑: 结果变量在复选框监听器中没有改变

默认 FinalPrice1 是 0,当我从复选框监听器更改它时,它不会更改为 Price1 值,它仍然是 0。我试图通过向它写入值来直接更改它 FinalPrice1 = 10000 也没有运气,它只是说0.

如果我删除了

            FinalPrice1 = 0;
            FinalPrice2 = 0;
            FinalPrice3 = 0;
            FinalPrice4 = 0;
            FinalPrice5 = 0;
            FinalPrice6 = 0;
            FinalPrice7 = 0;
            FinalPrice8 = 0;
            FinalPrice9 = 0;
            FinalPrice10 = 0;

应该是nullpointer 错误 我不知道怎么了

我不能粘贴整个代码,因为帖子不允许,它太长了 lmao

TotalFinalPrice 的变量只是没有改变或者可能没有计算

【问题讨论】:

    标签: java android android-studio checkbox


    【解决方案1】:

    当你的 TextView 必须更新时,使用invalidate() 方法。 这必须从 UI 线程调用。要从非 UI 线程调用,请调用 postInvalidate()。

    对于您的情况,请使用TxtvTotalHarga.invalidate();

    【讨论】:

    • 我应该在哪里使用它?在TxtvTotalHarga.setText(Integer.toString(TotalFinalPrice)); 之后?
    • 在您的听众中。示例:if (isChecked){ FinalPrice1 = Price1; //invalidate } else { FinalPrice1 = 0; //invalidate}
    • 嗯,运气和以前一样
    • 结果变量不会在复选框监听器中改变,它默认保持为 0 我声明我不知道为什么
    【解决方案2】:

    我认为你应该首先将你的对象处理成数组,使用标签值来保存初始价格,创建一个事件监听器(使用 object'd getTag() 或数组索引处理......

    而且重要的是:将 setOn..... 移出 if。在触发此事件之前,应在 onStart 上完成这些调用。

    你也可以在这个大 if 调用的上下文中提供更多代码吗?

    您是否使用 AS 进行调试以查看触发的这些事件?

    【讨论】:

    • hmmmm 这是个好主意,但我不知道该怎么做,我想我不能这样做,因为如果其他菜单也用于其他菜单,我会给出完整的代码是的,我调试它与安卓工作室...
    • 原来我无法将整个代码粘贴到帖子中,因为它超过了帖子的限制字符
    • 您可以尝试将一个 Price1 OnCheckListener 更改为 onClickListener 并检查它是否可以修复 thre 值更新?
    • 另外,debug的时候加个断点,看看有没有其他原因导致重新检查,所以切换了值。
    • 我正在尝试将 FinalPrice1 更改为 Price1 值,然后将其显示在测试 textview 上,当我选中复选框时,它仍然不会更改文本的值
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多