【问题标题】:Function not called when clicking on a button in Android单击Android中的按钮时未调用函数
【发布时间】:2020-05-08 13:07:30
【问题描述】:

我正在构建一个带有男性和女性单选按钮的 BMR 计算器。
我正在使用 switch case 来计算每个的 BMR,但它似乎不起作用。

当我按下计算按钮时没有任何反应。
当我直接计算它时,它似乎工作正常,即没有开关盒,ResultTextView 变得可见并显示答案。如果我重复这个问题,我很抱歉,我是编程新手。请忽略 BMR 的公式我知道它们不正确我只是将它们用于测试。 以下是我的代码:

    import androidx.appcompat.app.AppCompatActivity;

    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.RadioButton;
    import android.widget.RadioGroup;
    import android.widget.TextView;
    import android.widget.Toast;

    public class BmrActivity extends AppCompatActivity {

        RadioGroup radioGroup;
        RadioButton bmrFemaleRadioButton;
        RadioButton bmrMaleRadioButton;

        EditText bmrAgeEditText;
        EditText bmrWeightEditText;
        EditText bmrHeightEditText;
        Button bmrCalculateButton;
        TextView bmrResultTextView;

        Double age;
        Double weight;
        Double height;
        Double resultBmr;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_bmr);

            radioGroup = (RadioGroup) findViewById(R.id.radioGroup);
            bmrFemaleRadioButton = findViewById(R.id.bmrFemaleRadioButton);
            bmrMaleRadioButton = findViewById(R.id.bmrMaleRadioButton);

            bmrAgeEditText = findViewById(R.id.bmrAgeEditText);
            bmrWeightEditText = findViewById(R.id.bmrWeightEditText);
            bmrHeightEditText = findViewById(R.id.bmrHeightEditText);
            bmrCalculateButton = findViewById(R.id.bmrCalculateButton);
            bmrResultTextView = findViewById(R.id.bmrResultTextView);

            bmrFemaleRadioButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    bmrAgeEditText.setVisibility(View.VISIBLE);
                    bmrWeightEditText.setVisibility(View.VISIBLE);
                    bmrHeightEditText.setVisibility(View.VISIBLE);
                    bmrCalculateButton.setVisibility(View.VISIBLE);
                }
            });
            bmrMaleRadioButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    bmrAgeEditText.setVisibility(View.VISIBLE);
                    bmrWeightEditText.setVisibility(View.VISIBLE);
                    bmrHeightEditText.setVisibility(View.VISIBLE);
                    bmrCalculateButton.setVisibility(View.VISIBLE);
                }
            });
        }

        public void calculateBmr(final View view){
            age = Double.parseDouble(bmrAgeEditText.getText().toString());
            weight = Double.parseDouble(bmrWeightEditText.getText().toString());
            height = Double.parseDouble(bmrHeightEditText.getText().toString());

            radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(RadioGroup group, int checkedId) {
                    switch (checkedId){
                        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;
                    }
                }
            });
        }
    }

以下是我的 XML 布局文件:

    <?xml version="1.0" encoding="utf-8"?>
    <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".BmrActivity">

        <RadioGroup
            android:id="@+id/radioGroup"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="100dp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent">

            <RadioButton
                android:id="@+id/bmrFemaleRadioButton"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:fontFamily="monospace"
                android:text="Female" />

            <RadioButton
                android:id="@+id/bmrMaleRadioButton"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:fontFamily="monospace"
                android:text="Male" />
        </RadioGroup>

        <EditText
            android:id="@+id/bmrAgeEditText"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="26dp"
            android:ems="10"
            android:hint="Enter your age"
            android:inputType="number"
            android:visibility="invisible"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/radioGroup" />

        <EditText
            android:id="@+id/bmrWeightEditText"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="25dp"
            android:ems="10"
            android:hint="Enter your weight in kgs"
            android:inputType="number"
            android:visibility="invisible"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/bmrAgeEditText" />

        <EditText
            android:id="@+id/bmrHeightEditText"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="25dp"
            android:ems="10"
            android:hint="Enter your height in cms"
            android:inputType="number"
            android:visibility="invisible"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/bmrWeightEditText" />

        <Button
            android:id="@+id/bmrCalculateButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="50dp"
            android:onClick="calculateBmr"
            android:text="Calculate"
            android:visibility="invisible"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/bmrHeightEditText" />

        <TextView
            android:id="@+id/bmrResultTextView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:fontFamily="monospace"
            android:text="Answer"
            android:textAlignment="center"
            android:visibility="invisible"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/bmrCalculateButton" />
    </androidx.constraintlayout.widget.ConstraintLayout>

【问题讨论】:

    标签: java android xml android-studio


    【解决方案1】:

    你做错了。单击按钮时您正在调用setOnCheckedChangeListener(),但到那时单选按钮已被选中。发生更改时调用onCheckedChange()。 不用设置监听器,直接调用radioGroup.getCheckedRadioButtonId()获取被勾选项id

    喜欢这个

    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;
    }
    

    【讨论】:

    • @Annek 如果您的问题已解决,请接受 Ismail Shaikh 的回答以完成此问答。
    【解决方案2】:

    您是否尝试在 onCheckChanged 中获取年龄、体重、身高。因为它只解析一次,不再更新。

    【讨论】:

    • 是的,谢谢,我没想到。现在它可以在我为开关盒放入大括号时工作,但 resultTextView 仅在我更改单选按钮时才可见。
    • 添加条件通过 id 找到选中的复选框,按照您的以下答案进行
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多