Intentando establecer programáticamente el estado de un INTERRUPTOR dentro de una LISTVIEW después de que se muestre la vista de lista

Así que tengo una lista de alarmas y la asocio a la vista de lista, lstAlarms. En mi diseño ListView personalizado, también tengo un interruptor, que quiero configurar mediante programación de acuerdo con el estado de la alarma. Quiero hacer esto justo después de que se muestre el ListView.

Por favor vea mis códigos a continuación. El método que muestra ListView es DisplayAlarmList (). El método que estoy tratando de usar para establecer los estados de los interruptores es InitSwitches (), que se llama dentro de DisplayAlarmList (). DisplayAlarmList () se llama en el método onCreate ().

public void DisplayAlarmList()
{
    final String[] columns = {Database.getAlarmID(), Database.getAlarmTime(), Database.getAlarmName(), Database.getAlarmStatus(), Database.getAlarmRepeats()};
    Cursor c = Database.selectAlarm(db, Database.getTableName(), columns, null, null, null, null, null);

    int[] to = new int[]{
            R.id.alarmID,
            R.id.alarmTime,
            R.id.alarmName,
            R.id.alarmStatus,
            R.id.alarmRepeats,
    };

    SimpleCursorAdapter ca = new SimpleCursorAdapter(this,
            R.layout.alarm_info,
            c,
            columns,
            to,
            0);

    lstAlarm.setAdapter(ca);
    InitSwitches();

    lstAlarm.setOnItemClickListener(new OnItemClickListener()
    {

        @Override
        public void onItemClick(AdapterView<?> listView, View view, int position, long id)
        {
            Alarm alarm = new Alarm();
            Cursor selectedCursor = (Cursor) listView.getItemAtPosition(position);

            Switch s = (Switch) view.findViewById(R.id.alarmSwitch);

            String whereArgs = Integer.toString(selectedCursor.getInt(selectedCursor.getColumnIndexOrThrow(Database.getAlarmID())));


            Cursor data = Database.RawQuery(db, "SELECT * FROM " + Database.getTableName() + " WHERE " + Database.getAlarmID() + " = " + whereArgs);

            if (data.moveToFirst())
            {
                alarm.setAlarmID(data.getString(data.getColumnIndexOrThrow(Database.getAlarmID())));
                alarm.setAlarmName(data.getString(data.getColumnIndexOrThrow(Database.getAlarmName())));
                alarm.setAlarmTime(data.getString(data.getColumnIndexOrThrow(Database.getAlarmTime())));
                alarm.setAlarmSound(data.getString(data.getColumnIndexOrThrow(Database.getAlarmSound())));
                alarm.setAlarmRepeats(data.getString(data.getColumnIndexOrThrow(Database.getAlarmRepeats())));
                alarm.setAlarmStatus(data.getString(data.getColumnIndexOrThrow(Database.getAlarmStatus())));
            }

            Intent i = new Intent(view.getContext(), ScreenEdit.class);
            i.putExtra("editAlarm", new Gson().toJson(alarm));
            startActivityForResult(i, EDIT_ALARM);

        }
    });
}

public void InitSwitches()
{
    View v;
    Switch s;
    int index = 0;
    String query = "Select " + Database.getAlarmID() + ", " + Database.getAlarmStatus() + " FROM " + Database.getTableName();
    Cursor statuses = Database.RawQuery(db, query);

    while (statuses.moveToNext())
    {
        v = lstAlarm.getAdapter().getView(index++, null, null);
        s = (Switch) v.findViewById(R.id.alarmSwitch);

        if (statuses.getString(statuses.getColumnIndexOrThrow(Database.getAlarmStatus())).equals("ON")){
            s.toggle();
        }
        else{                

        }
    }
}

Captura de pantalla de la aplicación

Como puede ver en la captura de pantalla, se supone que el interruptor en la segunda fila está ENCENDIDO, pero no lo está. También probé InvilidateView () pero no funcionó. Por favor ayuda.