Нужна помощь в добавлении значений переключателей и текстовых полей

Я создал приложение в студии Android, которое использует переключатели, сгруппированные в группы переключателей и флажки, каждому из которых присваивается значение, которое сохраняется при нажатии определенного переключателя или флажка. В настоящее время есть кнопка вычисления, которая при нажатии вызывает метод submitOrder() и суммирует сумму всех выбранных переключателей и флажков и отображает ее на экране с сообщением. Это прекрасно работает. Я хочу полностью исключить кнопку расчета и автоматически рассчитывать и обновлять сумму в режиме реального времени, когда пользователь нажимает любой переключатель или комбинацию переключателей и флажков. Я искал повсюду в Stack Overflow и Google и не нашел полезных примеров или рекомендаций о том, как вызывать метод submitOrder() в самом коде Java. Я пробовал все виды итераций, но безуспешно. Любые рекомендации будут очень признательны.

Я попытался добавить метод submitOrder() в код, связанный с каждым переключателем или флажком, но безуспешно.

// следующий код необходим для того, чтобы радиогруппы функционировали без ошибок

public void onRadioButtonClicked(View view) {
    // Is the button now checked?
    boolean checked = ((RadioButton) view).isChecked();


}

public void submitOrder(View view) {

групповые переменные переключателя */

    RadioButton radio_one = (RadioButton) findViewById(R.id.radio_one);
    boolean hasRadioOne = radio_one.isChecked();


    RadioButton radio_two = (RadioButton) findViewById(R.id.radio_two);
    boolean hasRadioTwo = radio_two.isChecked();

    RadioButton radio_three = (RadioButton)  findViewById(R.id.radio_three);
    boolean hasRadioThree = radio_three.isChecked();

    RadioButton radio_four = (RadioButton) findViewById(R.id.radio_four);
    boolean hasRadioFour = radio_four.isChecked();


    RadioButton radio_five = (RadioButton) findViewById(R.id.radio_five);
    boolean hasRadioFive = radio_five.isChecked();



      // this is the starting value for assigning  the  score

    int basePrice = 0;

 // 5 values
    if (addRadioOne) {
        basePrice = basePrice + 3;





    } else if (addRadioTwo) {
        basePrice = basePrice + 1;



    } else if (addRadioThree) {
        basePrice = basePrice + 0;




    } else if (addRadioFour) basePrice = basePrice + 2;


    else if (addRadioFive) basePrice = basePrice + 3;

Это вычисляет общее количество:

  private int calculatePrice(boolean addRadioOne, boolean addRadioTwo,                    boolean addRadioThree,boolean addRadioFour, boolean addRadioFive)

Метод submitOrder(0 вызывает это: private int calculatePrice(boolean addRadioOne, boolean addRadioTwo, boolean addRadioThree, boolean addRadioFour, boolean addRadioFive

IOS-Android 12.06.2019 05:15
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
66
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы должны сделать следующее:

  • Вам не нужно передавать каждый Переключатель или Флажок в методе submitOrder().

  • Вы можете определить общий слушатель, используя OnCheckedChangeListener для каждого RadioGroup или CheckBox, вызывая submitOrder в этом.

  • Вы можете получить все значения по одному для каждого RadioButton и CheckBox либо правда или ложь

Надеюсь, вы превратите мои слова в программирование.

Спасибо

Спасибо за понимание!

IOS-Android 12.06.2019 15:56

Радиогруппа дыхания = (RadioGroup) findViewById(R.id.respiratory); { RadioGroup.OnCheckedChangeListener submitOrder; } // Я пробовал это, но безрезультатно. Я новый разработчик, поэтому, пожалуйста, примите мои извинения за мои навыки кузнечика. Как видите, я создал идентификатор для первой группы радио, затем добавил OnCheckedChangeListener для RadioGroup, а затем вызвал SubmitOrder. Это то, что вы имели в виду? Интересно, что я упускаю?

IOS-Android 12.06.2019 16:04

Итак, я пытаюсь сделать так, чтобы приложение автоматически обновляло общую сумму, когда выбрана какая-либо радиокнопка в любой радиогруппе или если установлен флажок. Я думаю, проблема в том, что я пытаюсь вызвать submitOrder(), когда уже нахожусь в методе submitOrder(). Это вообще возможно? Я продолжаю свои поиски..........

IOS-Android 13.06.2019 06:01

Вы должны сделать что-то вроде ниже. Установите checkedChangeListeners для всех переключателей. Когда каждая из радиокнопок отмечена/снята, слушатели соответственно обновят сумму.

        radio1 = findViewById(R.id.radio1);
        radio2 = findViewById(R.id.radio2);
        radio3 = findViewById(R.id.radio3);
        private int count=0;


        radio1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked)
                    count=count+3;
                else{
                    if (count>0){
                        count=count-3;
                    }
                }
                System.out.println(count);
            }
        });

        radio2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked)
                    count++;
                else{
                    if (count>0){
                        count--;
                    }
                }
                System.out.println(count);
            }
        });

        radio3.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked)
                    count=count+0;
                else{
                    if (count>0){
                        count=count-0;
                    }
                }
                System.out.println(count);
            }
        });
Ответ принят как подходящий
 //So after many attempts and much testing I found that all I had to do was add
 the submitOrder(view:null); in the onRadioButtonClicked method

// the following code is required in order for the radio groups to function 
//without causing an error

public void onRadioButtonClicked(View view) {
// Is the button now checked?
boolean checked = ((RadioButton) view).isChecked();
submitOrder(null);
}                

And for the checkboxes similarly we add the submitOrder(view:null); in 
the onCheckBoxClicked method which is called when the CheckBox is clicked

public void onCheckBoxClicked(View view) {
// Is the Checkbox now checked?
boolean checked = ((CheckBox) view).isChecked();
submitOrder(null);
}                

У вас должно быть два отдельных метода: один для RadioButtons и один для Флажки, которые должны вызываться в каждом XML-коде RadioButton и CheckBox. для каждого объекта. В противном случае приложение выйдет из строя.

Другие вопросы по теме