Java 在Android中单击按钮时未调用函数

Java 在Android中单击按钮时未调用函数,java,android,xml,android-studio,Java,Android,Xml,Android Studio,我正在构建一个BMR计算器,其中包含男性和女性的单选按钮。 我用一个开关箱来计算每个开关的BMR,但它似乎不起作用 按下“计算”按钮时不会发生任何情况。 当我直接计算它时,它似乎工作正常,即没有开关盒,ResultTextView变为可见并显示答案。如果我重复这个问题,我很抱歉,我是编程新手。请忽略BMR的公式,我知道它们不正确,我只是把它们放在测试中。 以下是我的代码: 导入androidx.appcompat.app.appcompat活动; 导入android.os.Bundle; 导入a

我正在构建一个BMR计算器,其中包含男性和女性的单选按钮。
我用一个开关箱来计算每个开关的BMR,但它似乎不起作用

按下“计算”按钮时不会发生任何情况。
当我直接计算它时,它似乎工作正常,即没有开关盒,ResultTextView变为可见并显示答案。如果我重复这个问题,我很抱歉,我是编程新手。请忽略BMR的公式,我知道它们不正确,我只是把它们放在测试中。 以下是我的代码:

导入androidx.appcompat.app.appcompat活动;
导入android.os.Bundle;
导入android.view.view;
导入android.widget.Button;
导入android.widget.EditText;
导入android.widget.RadioButton;
导入android.widget.RadioGroup;
导入android.widget.TextView;
导入android.widget.Toast;
公共类B实用性扩展了AppCompative活动{
放射组放射组;
单选按钮BMRFE单选按钮;
单选按钮BMR单选按钮;
编辑文本bmrAgeEditText;
编辑文本bmrw编辑文本;
编辑文本bmrheightedtext;
按钮B液晶按钮;
TextView bmrResultTextView;
双倍年龄;
双倍重量;
双高;
双重结果;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_bmr);
放射组=(放射组)findViewById(R.id.radioGroup);
bmrFemaleRadioButton=findViewById(R.id.bmrFemaleRadioButton);
bmrMaleRadioButton=findViewById(R.id.bmrMaleRadioButton);
bmrAgeEditText=findViewById(R.id.bmrAgeEditText);
bmrwarthdittext=findViewById(R.id.bmrwarthdittext);
bmrHeightEditText=findViewById(R.id.bmrHeightEditText);
bmrCalculateButton=findviewbyd(R.id.bmrCalculateButton);
bmrResultTextView=findViewById(R.id.bmrResultTextView);
bmrFemaleRadioButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
bmrAgeEditText.setVisibility(View.VISIBLE);
bmrwtext.setVisibility(View.VISIBLE);
bmrheightedText.setVisibility(View.VISIBLE);
bmrCalculateButton.setVisibility(View.VISIBLE);
}
});
bmrMaleRadioButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
bmrAgeEditText.setVisibility(View.VISIBLE);
bmrwtext.setVisibility(View.VISIBLE);
bmrheightedText.setVisibility(View.VISIBLE);
bmrCalculateButton.setVisibility(View.VISIBLE);
}
});
}
公共无效计算EBMR(最终视图){
age=Double.parseDouble(bmrAgeEditText.getText().toString());
weight=Double.parseDouble(bmrwdittext.getText().toString());
height=Double.parseDouble(bmrheightedText.getText().toString());
radioGroup.setOnCheckedChangeListener(新的radioGroup.OnCheckedChangeListener(){
@凌驾
检查更改后的公共无效(RadioGroup组,int checkedId){
开关(检查EDID){
案例R.id.bmrfemaleradio按钮:
结果MR=年龄+体重+身高;
setText(“您的BMR为”+resultmr);
bmrResultTextView.setVisibility(View.VISIBLE);
打破
外壳R.id.BMR按钮:
结果br=年龄*体重*身高;
setText(“您的BMR为”+resultmr);
bmrResultTextView.setVisibility(View.VISIBLE);
打破
}
}
});
}
}
以下是我的XML布局文件:



你试过搬家吗?一旦换了衣服,里面的年龄、体重、身高都会变。因为它只解析一次,不会再次更新。

您做得不对。单击按钮时,您正在调用
setOnCheckedChangeListener()
,但此时单选按钮已被选中。发生更改时,将调用
onCheckedChange()
。 您可以通过调用
radioGroup.getCheckedRadioButtonId()

像这样

switch(radioGroup.getCheckedRadioButtonId()){
    case R.id.bmrFemaleRadioButton:
         resultBmr = age + weight + height;
         bmrResultTextView.setText("Your BMR is "+resultBmr);
         bmrResultTextView.setVisibility(View.VISIBLE);
         break;
    case R.id.bmrMaleRadioButton:
         resultBmr = age * weight * height;
         bmrResultTextView.setText("Your BMR is "+resultBmr);
         bmrResultTextView.setVisibility(View.VISIBLE);
         break;
}

是的,谢谢,我没想到。现在它在我为开关盒放括号时工作,但resultTextView只有在我更改单选按钮时才可见answer@Annek如果您的问题已经解决,请接受伊斯梅尔·谢赫的回答,完成本问答。