首页 > 解决方案 > 如何在另一个外部类变量中分配进度条的值来执行计算?

问题描述

所以我一直在尝试在 android studio 中制作这个 BMI 计算器,当你将 Progress-bar 拖动到任何值时,你的 BMI 会立即得到计算。

为了执行这个,我所做的是-

在 Bundle 类中,

我直接声明了 2 个变量,并分配其中一个从高度进度条获取数据,另一个从体重进度条获取数据。

然后我为计算和文本设置编写了典型代码。

它没有用

对于我自己是一个非常陌生的人,我真的无法在这里找到我的错误。

所以结果我得到的是 - 一个静止的 BMI,这是我为身高和体重设置的进度条的初始值的结果。

我有一种感觉,我在某个地方犯了一个非常愚蠢的错误,我仍然无法注意到。你能指出这一点吗?

我使用的Java代码如下,请检查它-

BMI的代码在最后。我觉得问题出在那儿。

这是应用程序的屏幕截图-

截图2

截图1

这是我的代码——

public class MainActivity extends AppCompatActivity {

    TextView mheighttext,mweighttext2,mbmitext,mfunnymsg;
    SeekBar mbar1, mbar2;
    RelativeLayout mweightlayout, mlayout3;
    ImageView mgincbtn1,mgincbtn2,mgdecbtn1,mgdecbtn2;

    String mbmi, bmitext;
    int wt= 45;
    String wtwt="45";
    int ht= 158;
    String htht="158";

    float rslt;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_main);


        mheighttext=findViewById(R.id.heighttext);
        mweighttext2=findViewById(R.id.weighttext2);
        mbar1= findViewById(R.id.bar1);
        mbar2=findViewById(R.id.bar2);
        mgincbtn1=findViewById(R.id.gincbtn1);
        mgincbtn2=findViewById(R.id.gincbtn2);
        mgdecbtn1=findViewById(R.id.gdecbtn1);
        mgdecbtn2=findViewById(R.id.gdecbtn2);

        mbmitext=findViewById(R.id.bmitext1);
        mfunnymsg=findViewById(R.id.funnymsg);

        
        mbar1.setMax(246);
        mbar1.setProgress(160);

        mbar1.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {

                ht=progress;
                htht=String.valueOf(ht);
                mheighttext.setText(htht);

            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {

            }
        });


        mbar2.setMax(244);
        mbar2.setProgress(50);

        mbar2.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                
                wt=progress;
                wtwt=String.valueOf(wt);
                mweighttext2.setText(wtwt);
                
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {

            }
        });

        
        mgincbtn1.setOnClickListener(v -> {

            ht=ht+1;

            if (ht>=0 && ht<247) {

                mbar1.setProgress(ht);
                htht = String.valueOf(ht);
                mheighttext.setText(htht);

            }
        });

        
        mgdecbtn1.setOnClickListener(v -> {


            ht=ht-1;
            if (ht>=0 && ht<247) {

                mbar1.setProgress(ht);
                htht = String.valueOf(ht);
                mheighttext.setText(htht);

            }

        });
        
        mgincbtn2.setOnClickListener(view -> {
            wt=wt+1;

            if (wt>=0 && wt<244) {
                mbar2.setProgress(wt);
                wtwt = String.valueOf(wt);
                mweighttext2.setText(wtwt);
            }
        });
        
        mgdecbtn2.setOnClickListener(v -> {
            wt=wt-1;
            if (wt>=0 && wt<244) {

                mbar2.setProgress(wt);
                wtwt = String.valueOf(wt);
                mweighttext2.setText(wtwt);
            }
        });
        
        

            int htt = mbar1.getProgress();
            int wtt = mbar2.getProgress();
            float httt=htt/100;
            rslt= wtt/(httt*httt);
            mbmi=Float.toString(rslt);
            mbmitext.setText(mbmi);
        }
    }
}

标签: javaandroidandroid-studioclassandroid-activity

解决方案


移动这个你的代码...

int htt = mbar1.getProgress();
        int wtt = mbar2.getProgress();
        float httt=htt/100;
        rslt= wtt/(httt*httt);
        mbmi=Float.toString(rslt);
        mbmitext.setText(mbmi);

对一个方法说

    public void computeBMI(){
      int htt = mbar1.getProgress();
      int wtt = mbar2.getProgress();
      float httt=htt/100;
      rslt= wtt/(httt*httt);
      mbmi=Float.toString(rslt);
      mbmitext.setText(mbmi);
    }

然后在你的 UI 中添加一个按钮,比如 mCompute。然后,在您的 oncreate 方法中,您可以实现该按钮 onClickListener 以调用上面的 computeBMI()。

那是:

yourButton.setOnclickListener((v)->{
   computeBMI();
});

推荐阅读