Versuchen, den Status eines SCHALTERS in einer LISTVIEW programmgesteuert festzulegen, nachdem die Listenansicht angezeigt wurde

Also ich habe eine Liste von Alarmen und ich binde das an die Listenansicht, lstAlarms. In meinem benutzerdefinierten ListView-Layout habe ich auch einen Schalter, den ich programmgesteuert entsprechend dem Status des Alarms festlegen möchte. Ich möchte dies direkt nach der Anzeige von ListView tun.

Bitte sehen Sie meine Codes unten. Die Methode, die die ListView anzeigt, ist DisplayAlarmList (). Die Methode, mit der ich versuche, die Zustände der Schalter festzulegen, ist InitSwitches (), die in DisplayAlarmList () aufgerufen wird. DisplayAlarmList () wird in der Methode onCreate () aufgerufen.

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{                

        }
    }
}

ScreenShot von App

Wie Sie auf dem Screenshot sehen können, sollte der Schalter in der zweiten Reihe auf ON stehen, ist es aber nicht. Ich habe auch InvilidateView () ausprobiert, aber es hat nicht funktioniert. Bitte helfen Sie.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage