2017-06-20 67 views
2

有時我的RadioGroup按鈕在選擇時未被選中。我正在使用Xamarin.Android,我在RadioGroup中有大約15個RadioButtons。奇怪的是,焦點始終設置在RadioButton點擊,但有時相同RadioButton未設置爲單擊後檢查。下面是示例代碼,我目前使用的:RadioButton沒有選中RadioGroup按鈕點擊Xamarin.Android

radioGroup.CheckedChange += delegate 
{ 
    var radioButton = FindViewById<RadioButton>(radioGroup.CheckedRadioButtonId); 
    radioButton.Focusable = true; 
    radioButton.FocusableInTouchMode = true; 
    radioButton.RequestFocus(); 
    radioButton.Checked = true; 
}; 

我能做些什麼,以每個單選按鈕標記爲選中,每次我選擇它? 在此先感謝。

+0

應設置爲你點擊它,一旦經過。不要在處理程序 –

+0

中設置這些屬性,因爲我想讓選定的RadioButton獲得焦點並同時設置爲Checked。你對這種情況有什麼改進建議? – mrisek

+0

當你點擊按鈕時,它將被設置爲Checked並獲得焦點。刪除您的處理器中的所有內容 –

回答

3

奇怪的是,焦點始終設置在單擊的RadioButton上,但有時在單擊後沒有將相同的RadioButton設置爲Checked。

當你點擊單選按鈕,從而CheckedChange事件從來沒有得到觸發,當你點擊RadioButton首次因爲GetFocus永遠是第一位。

所以,我們要做的是,正確的方法是註冊focusChange事件爲每RadioButton和單選按鈕設置在focusChange事件處理程序檢查:

public class MainActivity : Activity 
{ 
    RadioGroup radioGroup; 
    protected override void OnCreate(Bundle bundle) 
    { 
     base.OnCreate(bundle); 

     // Set our view from the "main" layout resource 
     SetContentView (Resource.Layout.Main); 
     radioGroup = FindViewById<RadioGroup>(Resource.Id.mGroup); 

     //register focus change event for every sub radio button. 
     for (int i = 0; i < radioGroup.ChildCount; i++) 
     { 
      var child=radioGroup.GetChildAt(i); 
      if (child is RadioButton) 
      { 
       ((RadioButton)child).FocusChange += RadioButton_FocusChange; 
      } 
     } 
    } 


    private void RadioButton_FocusChange(object sender, Android.Views.View.FocusChangeEventArgs e) 
    { 
     //check if the radio button is the button that getting focus 
     if (e.HasFocus){ 
      ((RadioButton)sender).Checked = true; 
     } 
    } 
} 
+0

不幸的是,方法RadioButton_FocusChange()永遠不會在'RadioGroup'按鈕點擊時被調用。 – mrisek

+0

你能分享你的項目嗎?這真的不是複雜的事情,並且無處不在。正如@埃爾維斯說你應該註冊按鈕事件,而不是羣組活動 –

+0

@ mrisek你可以找到我的完整演示項目[這裏](https://github.com/elvisxia/RadioButtonDemo)。請嘗試一下。 –