2014-09-29 62 views
0

我是Android編程的初學者,嘗試創建一個簡單的程序,將英寸轉換爲英尺,將美元轉換爲日元。我有以下兩個無線電組在我main_activity.xml文件:當有兩個廣播組時,請檢查單選按鈕ID

<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 2014-09-29 02:21:09

+0

我不確定我是否理解你,但我在單選按鈕中有這樣一行:android:onClick =「handleClickOne」,這是否表示我在單選按鈕上註冊了點擊處理程序? – TonyGW 2014-09-29 02:26:44

+0

在默認情況下添加一個Log語句(或斷點)來檢查傳入的視圖的ID。這應該有助於找出爲什麼默認情況下會被命中,而不是R.id.foot或R.id英寸的情況。 – stkent 2014-09-29 02:28:14

回答

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; 
} 

它現在可行,但我仍然對學習最佳實踐感興趣。謝謝大家!

相關問題