java - 如何在另一个外部类变量中分配进度条的值来执行计算?
问题描述
所以我一直在尝试在 android studio 中制作这个 BMI 计算器,当你将 Progress-bar 拖动到任何值时,你的 BMI 会立即得到计算。
为了执行这个,我所做的是-
在 Bundle 类中,
我直接声明了 2 个变量,并分配其中一个从高度进度条获取数据,另一个从体重进度条获取数据。
然后我为计算和文本设置编写了典型代码。
它没有用
对于我自己是一个非常陌生的人,我真的无法在这里找到我的错误。
所以结果我得到的是 - 一个静止的 BMI,这是我为身高和体重设置的进度条的初始值的结果。
我有一种感觉,我在某个地方犯了一个非常愚蠢的错误,我仍然无法注意到。你能指出这一点吗?
我使用的Java代码如下,请检查它-
BMI的代码在最后。我觉得问题出在那儿。
这是应用程序的屏幕截图-
这是我的代码——
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);
}
}
}
解决方案
移动这个你的代码...
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();
});
推荐阅读
- c++ - 构建 Rcpp 包时未在 Makevars.win 中读取 LDFLAGS
- marie - 我将如何修复此代码以乘以负数?
- mysql - 无法创建带有卷的 MYSQL docker 容器
- c# - 如何尽可能快地同时填写多个列表?
- python - 使用 WPF 执行 python 脚本
- java - 无法使用 API for Java 在 KML 文件中创建地标和样式
- firebase - Firefox 拒绝加载 firebase 身份验证脚本
- kotlin - Jetpack Compose Desktop:可滚动列/LazyColumn
- r - 散点图上的颜色线 - R
- python - 虽然循环没有破坏python