2016-08-23 17 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ループ"チェックボックスをリストに追加するにはどうすればよいですか?私はこれらのチェックボックスがどれくらいでなければならないか分からない。 – coldzero

+0

@coldzeroこれらのチェックボックスはあなたのフォームでどのように宣言されていますか?クラスフィールドまたはプロパティですか? –

+0

URLからjson構造を取得し、データに変換してチェックボックスを作成するため、これらは動的に追加されます。場合によっては3つありますが、時には10または20もあります。 – coldzero

0

これはどのように迅速かつ汚いサンプルですダイナミックcheboxesを生成し、それらの状態盗んする:

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

     } 
    } 

する。これは、あなたが最小の労力でこれを達成することができます方法についてはサンプルです。

関連する問題