Как извлечь проверенное свойство из динамически генерируемых флажков? - PullRequest
0 голосов
/ 14 января 2012

У меня проблема с определением, установлены ли флажки.Это потому, что они генерируются динамически.Я попытался создать 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

Но я хочу иметь возможность определять каждый динамический флажок независимо от того, отмечены они или нет.

Yeong Chai

1 Ответ

0 голосов
/ 15 января 2012

Замените этот код на:

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

                }

Проблема заключалась в том, что вы использовали myCB.isChecked () вместо второго параметра "arg1", чтобы определить, проверен ли CheckBox или нет.myCB всегда будет указывать на последний созданный вами CheckBox, потому что вы назначаете его каждый раз, когда проходите цикл.

...