2014-09-29 2 views
0

Я начинаю программировать на Android и пытаюсь создать простую программу, которая преобразует дюймы в футы и доллары США в японскую иену. У меня есть следующие две группы радио в моем main_activity.xml файле:Проверить идентификатор кнопки радио, когда есть две группы радиосвязи

<RadioGroup 
     android:id="@+id/radioGroup1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignLeft="@+id/distanceInput" 
     android:layout_below="@+id/distanceInput" 
     android:layout_marginTop="10dp" > 

     <RadioButton 
      android:id="@+id/inch" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="12dp" 
      android:checked="true" 
      android:onClick="handleClickOne" 
      android:text="Inches" /> 

     <RadioButton 
     android:id="@+id/foot" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignLeft="@+id/currencyInput" 
     android:layout_below="@+id/radioGroup1" 
     android:onClick="handleClickOne" 
     android:text="Feet" /> 

    </RadioGroup> 

    <RadioGroup 
     android:id="@+id/radioGroup2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignLeft="@+id/currencyInput" 
     android:layout_below="@+id/currencyInput" 
     android:layout_marginTop="10dp" > 

     <RadioButton 
      android:id="@+id/japan" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignLeft="@+id/radioGroup2" 
      android:layout_centerVertical="true" 
      android:checked="true" 
      android:text="JPY" 
      android:onClick="handleClickTwo" 
      /> 

     <RadioButton 
      android:id="@+id/usdollar" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignLeft="@+id/euro" 
      android:layout_below="@+id/euro" 
      android:text="US Dollars" 
      android:onClick="handleClickTwo" 
      /> 
    </RadioGroup> 

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

public void handleClickOne(View view) { 
    DecimalFormat df = new DecimalFormat("#.##"); 


    boolean checked = ((RadioButton) view).isChecked(); 

    EditText distance = (EditText) findViewById(R.id.distanceInput); 
    double distanceInput = parseStringToDouble(distance.getText().toString()); 

    switch(view.getId()) { 
    case R.id.foot: 
     // convert inches to feet 
     if (checked) { 
      distance.setText(df.format(inchToFoot(distanceInput))); 
     } 
     break; 

    case R.id.inch: 
     //convert feet to inches 
     if (checked) { 
      distance.setText(df.format(footToInch(distanceInput))); 
     } 
     break; 

    default: 
     distance.setText("000"); 
     break; 
    } 
} 

Мой вопрос, нужен ли я выбрать радиокнопку в радио группе? и если да, то как?

+1

Возможно ли, что щелчок, возможно, зарегистрирован в RadioGroup (id radioGroup1), а не на дочерние? – stkent

+0

Я не уверен, что понимаю вас, но у меня есть эта строка в моем переключателе: android: onClick = "handleClickOne", означает ли это, что я зарегистрировал обработчик кликов на переключателе? – TonyGW

+0

Добавить оператор журнала (или точку останова) в вашем случае по умолчанию, чтобы проверить идентификатор передаваемого представления. Это должно помочь выяснить, почему удаляется случай по умолчанию, а не R.id.foot или R.id . – stkent

ответ

0

Использование

RadioGroup.setOnCheckedChangeListener 

вместо onclick чтобы увидеть, какая кнопка радио установлен. Я не думаю, что OnClick надежно работает для радиокнопки

0

Я не уверен, если это лучший способ сделать, но следующие работы на данный момент:

Потому что я знаю, какой метод обработчик щелчка работает для какой группы радио, так что в каждом из моих методов обработчика щелчка (в данном случае handleClickOne()), я получаю объект RadioGroup первый:

RadioGroup radioGroup1 = (RadioGroup) findViewById(R.id.radioGroup1); 

затем сделать мой переключатель-дело так:

switch(radioGroup1.getCheckedRadioButtonId()) { 
     case R.id.foot: 
     // convert inches to feet 
     if (checked) { 
      distance.setText(df.format(inchToFoot(distanceInput))); 
     } 
     break; 

    case R.id.inch: 
     //convert feet to inches 
     if (checked) { 
      distance.setText(df.format(footToInch(distanceInput))); 
     } 
     break; 

    default: 
      distance.setText("error"); 
      break; 
} 

Сейчас это работает, но я все еще интересуюсь лучшей практикой. Спасибо всем!

Смежные вопросы