2012-01-14 8 views
0

私はチェックボックスがチェックされているかどうかを判断する問題に直面しています。これは、それらが動的に生成されるためです。私は各動的チェックボックスのOnCheckedChangeListener()を作成しようとしましたが、最後の動的チェックボックスのOnCheckedChangeListener()のみが実行されることが確認されました。私がしたいことは、彼らがチェックにチェックされているか否かを各動的チェックボックスを決定できるようにすることです、動的に生成されるチェックボックスからチェックされたプロパティを取得する方法は?

public class yc_SubmitAttendance_ClassMode extends Activity { 

Context myContext = this; 
myDbAdapter myDB = null; 
Cursor myCur = null; 
Spinner mySpin = null; 

TableLayout tl = null; 

CheckBox myCB = null; 


public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.yc_studattend_classmode_layout); 

    mySpin = (Spinner)findViewById(R.id.spinClassModeSelectModGrp); 

    myDB = new myDbAdapter(myContext); 

    tl = (TableLayout)findViewById(R.id.classModeTableLayout); 
      //retrieve dynamic data 
      myCur = myDB.retrieveAttnForSelectedMod(mySpin.getItemAtPosition(arg2).toString()); 

      myCur.moveToFirst(); 

      for(byte rowNo=0;rowNo<myCur.getCount();rowNo++) 
      { 
       TableRow tr = new TableRow(myContext); 

       /*Some codes intentionally left missing */ 

       myCB = new CheckBox(myContext); 
       myCB.setId(rowNo); 

       //Setting a onCheckedListener on each of the checkbox generated 

       myCB.setOnCheckedChangeListener(new OnCheckedChangeListener(){ 

        public void onCheckedChanged(CompoundButton arg0, 
          boolean arg1) { 
         // TODO Auto-generated method stub 

         myCur.moveToPosition(myCB.getId()); 

         if(myCB.isChecked()) 
         { 
          Toast.makeText(myContext,"Attendance deducted to " + ((myCur.getFloat(2)) - 2) + "%", Toast.LENGTH_SHORT).show(); 
         } 
         else 
         { 
          Toast.makeText(myContext,"Attendance reverting to " + (myCur.getFloat(2)) + "%", Toast.LENGTH_SHORT).show(); 
         } 

        } 

       }); 

       //Insert the checkbox onto this row 
       tr.addView(myCB); 

       //Append this row to the TableLayout 
       tl.addView(tr, new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 

       myCur.moveToNext(); 

      } //end of for-loop 
     } // end of onCreate 
}//end of class 

をしかし:

はここに私のコードスニペットです(それが役に立つことを願っています)。

ヨンチャイ

答えて

0

代替はこのコード:問題は()あなたがmyCB.isCheckedを使用していただったが

  myCB.setOnCheckedChangeListener(new OnCheckedChangeListener(){ 

       public void onCheckedChanged(CompoundButton thisCheckBox, 
         boolean isChecked) { 
        // TODO Auto-generated method stub 

        myCur.moveToPosition(thisCheckBox.getId()); 

        if(isChecked) 
        { 
         Toast.makeText(myContext,"Attendance deducted to " + ((myCur.getFloat(2)) - 2) + "%", Toast.LENGTH_SHORT).show(); 
        } 
        else 
        { 
         Toast.makeText(myContext,"Attendance reverting to " + (myCur.getFloat(2)) + "%", Toast.LENGTH_SHORT).show(); 
        } 

       } 

代わりに第二引数「arg1には、」チェックボックスがチェックされたかどうかを判断します。 myCBは、ループバックするたびに割り当てるため、作成する最後のCheckBoxを常に指します。

+0

Hii Grazahd、あなたの迅速な対応に感謝します。これは今やチャンピオンのように動作し、** onCheckedChangeListener()**についての理解を明確にしました。価値のあるサムサップ。 –

関連する問題