2016-08-23 85 views
0

我用编程方式添加了复选框的小问题。当我点击“发送按钮”时,我不知道如何检查选中哪个复选框。如何检查复选框是否被选中?

layout.RemoveAllViewsInLayout(); 

        CheckBox _Options = new CheckBox(Activity); 
        ScrollView _Scroll = new ScrollView(Activity); 
        _Scroll.LayoutParameters = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WrapContent, ViewGroup.LayoutParams.WrapContent); 
        LinearLayout _LScroll = new LinearLayout(Activity); 
        _LScroll.LayoutParameters = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WrapContent, ViewGroup.LayoutParams.WrapContent); 
        _LScroll.Orientation = Orientation.Vertical; 
        _LScroll.SetGravity(GravityFlags.CenterHorizontal); 

        //_Scroll.AddView(_LScroll); 
        Button _Send = new Button(Activity); 
        _Send.Text = "Wyślij"; 
        _Send.LayoutParameters = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MatchParent, ViewGroup.LayoutParams.WrapContent); 

        for (int i = 0; i < _Item.options.Length; i++) 
        { 
         _Options.Text = _Item.options[i]; 
         _Options.Id = i; 
         _Options.LayoutParameters = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MatchParent, ViewGroup.LayoutParams.WrapContent); 
         _LScroll.AddView(_Options); 

        } 

        _Send.Click += delegate 
        { 
         _MultiAnswer._QuestionId = _Item.id; 

         for(int i = 0; i < _Item.options.Length; i++) 
         { 
          if (_Options.Selected == true) 
          { 
           _MultiAnswer._AnwserOptionIds.SetValue(i + 1, i); 
          } 
         } 

         output = JsonConvert.SerializeObject(_MultiAnswer); 
         SendJson(_Url, DataCache._Login, output); 

         SetLayout(layout, btn); 
        }; 

        _Scroll.AddView(_LScroll); 
        layout.AddView(_Scroll); 
        layout.AddView(_Send); 

我会尝试使用复选框的ID,但我真的不知道该怎么做。我在想方法,它给我创建复选框的代码,但仍不知道如何检查复选框是否被选中。

回答

1

我知道你有很多复选框控件。因此,将它们添加到列表如下:

List<Checkbox> checkboxes = new List<Checkbox> 
{ 
    chk1, chk2, chk3 
}; 

当你想知道哪些是检查,你会做到这一点:

IEnumerable<Checkbox> checkedCheckboxes = checkboxes.Where(chk => chk.Checked); 
+0

如何添加“for循环”复选框的属性(文本,layoutparameters)到列表?我不知道这些复选框必须有多少。 – coldzero

+0

@coldzero这些复选框如何在您的表单中声明?类字段或属性? –

+0

它们是动态添加的,因为我从url获取json结构并将其转换为数据,以创建复选框。有时候有3个,但有时候有10或20个。 – coldzero

0

这是如何快速和肮脏的样本生成动态cheboxes和retreive他们的状态:

public class MainActivity : Activity 
    { 

     public class MyItem 
     { 
      public string[] options { get; set; } 
      public int id { get; set; } 
     } 
     public class MyMultiAnswer 
     { 
      public int _QuestionId { get; set; } 
     } 

     private List<CheckBox> _chkList = new List<CheckBox>(); 

     protected override void OnCreate(Bundle bundle) 
     { 
      base.OnCreate(bundle); 

      var _Item = new MyItem() { options =new string [] { "aaa", "bbb", "ccc" }, id=0 }; 
      var _MultiAnswer = new MyMultiAnswer() { _QuestionId = 0 }; 



      ScrollView _Scroll = new ScrollView(this); 
      _Scroll.LayoutParameters = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WrapContent, ViewGroup.LayoutParams.WrapContent); 
      LinearLayout _LScroll = new LinearLayout(this); 
      _LScroll.LayoutParameters = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WrapContent, ViewGroup.LayoutParams.WrapContent); 
      _LScroll.Orientation = Orientation.Vertical; 
      _LScroll.SetGravity(GravityFlags.CenterHorizontal); 

      TextView txView = new TextView(this); 

      //_Scroll.AddView(_LScroll); 
      Button _Send = new Button(this); 
      _Send.Text = "test"; 
      _Send.LayoutParameters = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MatchParent, ViewGroup.LayoutParams.WrapContent); 

      for (int i = 0; i < _Item.options.Length; i++) 
      { 
       CheckBox _Options = new CheckBox(this); 
       _chkList.Add(_Options); 
       _Options.Text = _Item.options[i]; 
       _Options.Id = i; 
       _Options.LayoutParameters = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MatchParent, ViewGroup.LayoutParams.WrapContent); 
       _LScroll.AddView(_Options); 
      } 

      _Send.Click += delegate 
      { 
       _MultiAnswer._QuestionId = _Item.id; 
       string strChkIds = ""; 

       foreach (var chk in _chkList.Where(c => c.Checked)) 
       { 
        //_MultiAnswer._AnwserOptionIds.SetValue(_Options.Id + 1, _Options.Id); 
        //do something 
        strChkIds += " - " + chk.Id; 
       } 

       // or 

       for (int i = 0; i < _Item.options.Length; i++) 
       { 
        if (_chkList[i].Checked == true) 
        { 
         //_MultiAnswer._AnwserOptionIds.SetValue(i + 1, i); 
         //do something 
        } 
       } 

       //output = JsonConvert.SerializeObject(_MultiAnswer); 
       //SendJson(_Url, DataCache._Login, output); 

       //SetLayout(layout, btn); 
       txView.Text = "selected ids " + strChkIds; 
      }; 

      _Scroll.AddView(_LScroll); 
      _LScroll.AddView(_Send); 
      _LScroll.AddView(txView); 

      // Set our view from the "main" layout resource 
      SetContentView(_Scroll); 

     } 
    } 

这是一个关于如何在最小的努力实现这个样品。

相关问题