Функция не вызывается при нажатии на кнопку в Android - PullRequest
1 голос
/ 08 мая 2020

Я создаю калькулятор BMR с переключателями для мужчин и женщин.
Я использую корпус переключателя для расчета 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>

Ответы [ 2 ]

2 голосов
/ 08 мая 2020

Вы делаете это неправильно. Вы звоните по номеру 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;
}
0 голосов
/ 08 мая 2020

А вы пробовали переехать получить возраст, вес, рост внутри onCheckChanged. Потому что он анализируется только один раз и не обновляется снова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...