Попытка программно установить состояние ПЕРЕКЛЮЧАТЕЛЯ внутри LISTVIEW после отображения списка
Итак, у меня есть список аварийных сигналов, и я связываю его со списком, lstAlarms. В моем собственном макете ListView у меня также есть переключатель, который я хочу установить программно в соответствии с состоянием тревоги. Я хочу сделать это сразу после того, как ListView только что отображается.
Пожалуйста, смотрите мои коды ниже. Метод, который отображает ListView - это DisplayAlarmList (). Метод, который я пытаюсь использовать для установки состояний переключателей, - это InitSwitches (), который вызывается внутри DisplayAlarmList (). DisplayAlarmList () вызывается в методе 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{
}
}
}
Как видно из снимка экрана, переключатель во втором ряду должен быть включен, но это не так. Я пытался InvilidateView () тоже, но не работал. Пожалуйста помоги.