Я создал приложение в студии 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().
Вы можете определить общий слушатель, используя OnCheckedChangeListener для каждого RadioGroup или CheckBox, вызывая submitOrder в этом.
Вы можете получить все значения по одному для каждого RadioButton и CheckBox либо правда или ложь
Надеюсь, вы превратите мои слова в программирование.
Спасибо
Спасибо за понимание!
Радиогруппа дыхания = (RadioGroup) findViewById(R.id.respiratory); { RadioGroup.OnCheckedChangeListener submitOrder; } // Я пробовал это, но безрезультатно. Я новый разработчик, поэтому, пожалуйста, примите мои извинения за мои навыки кузнечика. Как видите, я создал идентификатор для первой группы радио, затем добавил OnCheckedChangeListener для RadioGroup, а затем вызвал SubmitOrder. Это то, что вы имели в виду? Интересно, что я упускаю?
Итак, я пытаюсь сделать так, чтобы приложение автоматически обновляло общую сумму, когда выбрана какая-либо радиокнопка в любой радиогруппе или если установлен флажок. Я думаю, проблема в том, что я пытаюсь вызвать submitOrder(), когда уже нахожусь в методе submitOrder(). Это вообще возможно? Я продолжаю свои поиски..........
Вы должны сделать что-то вроде ниже. Установите 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. для каждого объекта. В противном случае приложение выйдет из строя.
Метод submitOrder(0 вызывает это: private int calculatePrice(boolean addRadioOne, boolean addRadioTwo, boolean addRadioThree, boolean addRadioFour, boolean addRadioFive