Проблема в том, что вы сравниваете выбранный идентификатор RadioGroup ... вам нужно изменить свой onClick () на:
public void onClick(View v) {
if (v == calculate) {
String billtotal;
double total = 0;
billtotal = bill.getText().toString();
final int aInt = Integer.parseInt(billtotal);
if (radioCheckedId == R.id.poor) {
total = aInt * 1.1;
final String aString = Double.toString(total);
resulttotal.setText(aString);
}
if (radioCheckedId == R.id.average) {
total = aInt * 1.15;
final String aString = Double.toString(total);
resulttotal.setText(aString);
}
if (radioCheckedId == R.id.excellent) {
total = aInt * 1.2;
final String aString = Double.toString(total);
resulttotal.setText(aString);
}
}
}
onCheckedChanged () дает вам R.id для представления, а не просто число, которое говорит вам, что оно в последовательности.
Несколько быстрых (не связанных) предложений:
- Используйте оператор switch вместо набора операторов if.
- Поместите что-нибудь, чтобы проверить -1 (ничего не проверено) тоже ... просто чтобы быть уверенным.
- В onClick () я обычно проверяю, для какого вида был выбран щелчок, проверяя идентификатор входящего представления. Это просто делает его там, где вам не нужно хранить все в памяти, и (ИМХО) немного яснее, о чем вы говорите.
Вышеуказанные предложения будут выглядеть примерно так:
public void onClick(View v) {
if (v.getId() == R.id.calculate) {
String billtotal;
double total = 0;
billtotal = bill.getText().toString();
final int aInt = Integer.parseInt(billtotal);
switch(radioCheckedId) {
case R.id.poor:
total = aInt * 1.1;
final String aString = Double.toString(total);
resulttotal.setText(aString);
break;
case R.id.average:
total = aInt * 1.15;
final String aString = Double.toString(total);
resulttotal.setText(aString);
break;
case R.id.excellent:
total = aInt * 1.2;
final String aString = Double.toString(total);
resulttotal.setText(aString);
break;
default:
// do something for when nothing is selected... maybe throw an error?
break;
}
}
}
Наконец, если все, что вы делаете в onCheckedChanged () - это сохраняете значение, вы можете избавиться от всего этого вместе и просто проверить это в onClick (). Что-то вроде:
public void onClick(View v) {
int radioCheckedId = radiogroup1.getCheckedRadioButtonId();
if (v == calculate) {
// ...
Не связано, но другая проблема, которую я заметил (и кто-то еще упомянул) ... если ваши EditText перечислены в компоновке XML, то вам нужно подключить их вот так (а не создавать новые):
EditText bill = (EditText) findViewById(R.id.bill );
EditText resulttotal = (EditText) findViewById(R.id.resulttotal);
Кроме того, вы могли бы просто использовать TextView вместо EditView для результата, если вам не нужно, чтобы он был редактируемым.