2016-04-19 8 views
0

複数の選択肢のためにユーザーに表示されるチェックボックスが20あるアンドロイドアプリを作成しています。チェックボックスを動的に表示するようにプログラムしましたが、問題はチェックボックスの値を取得する方法です。私はこれまでこのコードを試しました。動的にチェックボックスを追加し、アンドロイドのチェックされていない値を取得する

私のグローバル変数は

ArrayList<MyCheckBox> listOfCheckedItem; 
private int CHECKBOX_POSITION; 

と、私はこの

listOfCheckedItem = new ArrayList<>(); 
     listOfCheckedItem.add(new MyCheckBox(true, "One")); //(isChecked,text) 
     listOfCheckedItem.add(new MyCheckBox(false, "Two")); 
     listOfCheckedItem.add(new MyCheckBox(true, "Three")); 
     listOfCheckedItem.add(new MyCheckBox(false, "four")); 
     listOfCheckedItem.add(new MyCheckBox(false, "five")); 

     ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); 
     for (int i = 0; i < listOfCheckedItem.size(); i++) { 
      CHECKBOX_POSITION = i; 
      MyCheckBox myCheckBox = listOfCheckedItem.get(i); 
      CheckBox checkBox = new CheckBox(this); 
      checkBox.setChecked(myCheckBox.getIsChecked()); 
      checkBox.setText(myCheckBox.getText()); 
      selectCategoryLayout.addView(checkBox, params); 
      checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
       @Override 
       public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
        listOfCheckedItem.get(CHECKBOX_POSITION).setIsChecked(isChecked); 
       } 
      }); 
     } 

のような何かをしたと私はこの

のようでしたチェックボックスの値を取得するには、チェックボックスを追加するためです
StringBuilder builder = new StringBuilder(); 
     for (int i = 0; i < listOfCheckedItem.size(); i++) { 
      MyCheckBox mcb = listOfCheckedItem.get(i); 
      builder.append("\nstatus: " + mcb.getText() + " is " + mcb.getIsChecked()); 
     } 
     resultView.setText(builder.toString()); 

初めてアプリケーションを実行すると、すべてのチェックボックスが正しく表示されます。ボタンをクリックしてチェックボックスをオンにすると、正しい結果が表示されますが、チェックボックスをオンまたはオフにすると結果を取得するためにボタンを再度クリックすると、最後のチェックボックスの値が変更されます。私が見逃していることは分かりません。

+0

のようなあなたの動的に生成されたチェックボックスにタグ属性を追加しました。この

checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { listOfCheckedItem.get(CHECKBOX_POSITION).setIsChecked(isChecked);// changed this line as below code } }); 

を行います。そのタグでビューを見つけます。 –

答えて

0

解決される問題、 代わりに、私はこの

checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
       @Override 
       public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
        myCheckBox.setIsChecked(isChecked);//I changed this line and every thing worked fine 
       } 
      }); 
関連する問題