Как вынести обработчик из кастомного ResourceCursorAdapter
Добавлено: 17 фев 2014, 15:17
Здравствуйте!
Я новичок, Прошу помощи знающих людей.
Пишу будильник. храню будильники в базе SQLite.
На главном Activity есть ListView, который берет данные из БД через CustomAdapter (унаследованный от ResourceCursorAdapter)
Код инициализации (в MainActivity):
[syntax=java5] CustomAdapter customadapter = new CustomAdapter (getApplicationContext(), R.layout.mainlist_item, cursor, true); // Создаем адаптер и настраиваем список
lvAlarmsList = (ListView) findViewById(R.id.listViewAlarmsList);
lvAlarmsList.setAdapter(customadapter);[/syntax]
Код адаптера:
[syntax=java5]public class CustomAdapter extends ResourceCursorAdapter {
public final String LOG_TAG = "myLogs";
public CustomAdapter(Context context, int mainlistItem, Cursor c, boolean autoRequery) {
super(context, mainlistItem, c, autoRequery);
}
@Override
public void bindView(View view, Context context, final Cursor cursor) { //Засовываем данные в поля
final int rowID = cursor.getInt(cursor.getColumnIndex(DB.KEY_ROWID)); //Получаем ID строки из курсора (курсор в определенной строке)
final DB db;
db = new DB(context);
CheckBox cbEnable = (CheckBox)view.findViewById(R.id.cbEnable);
cbEnable.setChecked(Boolean.valueOf(cursor.getString(cursor.getColumnIndex(DB.KEY_ENABLE))));
TextView tvDescription = (TextView)view.findViewById(R.id.tvDescription);
tvDescription.setText(cursor.getString(cursor.getColumnIndex(DB.KEY_DESCRIPTION)));
TextView tvAlarmTime = (TextView)view.findViewById(R.id.tvAlarmTime);
tvAlarmTime.setText(MainActivity.formatTime(cursor.getInt(cursor.getColumnIndex(DB.KEY_ALARMHOUR)), cursor.getInt(cursor.getColumnIndex(DB.KEY_ALARMMIN))));
TextView tvDaysOfWeek = (TextView)view.findViewById(R.id.tvDaysOfWeek);
String daysOfWeek = "";
if (Boolean.valueOf(cursor.getString(cursor.getColumnIndex(DB.KEY_MONDAY)))) daysOfWeek = daysOfWeek + "Пн";
if (Boolean.valueOf(cursor.getString(cursor.getColumnIndex(DB.KEY_TUESDAY)))) if (daysOfWeek.length() > 0) daysOfWeek = daysOfWeek + ", Вт"; else daysOfWeek = daysOfWeek + "Вт";
if (Boolean.valueOf(cursor.getString(cursor.getColumnIndex(DB.KEY_WEDNESDAY)))) if (daysOfWeek.length() > 0) daysOfWeek = daysOfWeek + ", Ср"; else daysOfWeek = daysOfWeek + "Ср";
if (Boolean.valueOf(cursor.getString(cursor.getColumnIndex(DB.KEY_THURSDAY)))) if (daysOfWeek.length() > 0) daysOfWeek = daysOfWeek + ", Чт"; else daysOfWeek = daysOfWeek + "Чт";
if (Boolean.valueOf(cursor.getString(cursor.getColumnIndex(DB.KEY_FRIDAY)))) if (daysOfWeek.length() > 0) daysOfWeek = daysOfWeek + ", Пт"; else daysOfWeek = daysOfWeek + "Пт";
if (Boolean.valueOf(cursor.getString(cursor.getColumnIndex(DB.KEY_SATURDAY)))) if (daysOfWeek.length() > 0) daysOfWeek = daysOfWeek + ", Сб"; else daysOfWeek = daysOfWeek + "Сб";
if (Boolean.valueOf(cursor.getString(cursor.getColumnIndex(DB.KEY_SUNDAY)))) if (daysOfWeek.length() > 0) daysOfWeek = daysOfWeek + ", Вс"; else daysOfWeek = daysOfWeek + "Вс";
tvDaysOfWeek.setText(daysOfWeek);
cbEnable.setOnCheckedChangeListener(new OnCheckedChangeListener() { //Обработчик для чекбокса
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
db.open();
boolean res = db.changeAlarmState(rowID, isChecked);
cursor.requery();
db.close();
//Log.d(LOG_TAG, "изменение= " + res);
//Log.d(LOG_TAG, "Item " + rowID + " " + isChecked);
}
});
}
}[/syntax]
Нужно обработчик нажатия на checkBox вынести в MainActivity. Подскажите, как до него достучаться?
Я новичок, Прошу помощи знающих людей.
Пишу будильник. храню будильники в базе SQLite.
На главном Activity есть ListView, который берет данные из БД через CustomAdapter (унаследованный от ResourceCursorAdapter)
Код инициализации (в MainActivity):
[syntax=java5] CustomAdapter customadapter = new CustomAdapter (getApplicationContext(), R.layout.mainlist_item, cursor, true); // Создаем адаптер и настраиваем список
lvAlarmsList = (ListView) findViewById(R.id.listViewAlarmsList);
lvAlarmsList.setAdapter(customadapter);[/syntax]
Код адаптера:
[syntax=java5]public class CustomAdapter extends ResourceCursorAdapter {
public final String LOG_TAG = "myLogs";
public CustomAdapter(Context context, int mainlistItem, Cursor c, boolean autoRequery) {
super(context, mainlistItem, c, autoRequery);
}
@Override
public void bindView(View view, Context context, final Cursor cursor) { //Засовываем данные в поля
final int rowID = cursor.getInt(cursor.getColumnIndex(DB.KEY_ROWID)); //Получаем ID строки из курсора (курсор в определенной строке)
final DB db;
db = new DB(context);
CheckBox cbEnable = (CheckBox)view.findViewById(R.id.cbEnable);
cbEnable.setChecked(Boolean.valueOf(cursor.getString(cursor.getColumnIndex(DB.KEY_ENABLE))));
TextView tvDescription = (TextView)view.findViewById(R.id.tvDescription);
tvDescription.setText(cursor.getString(cursor.getColumnIndex(DB.KEY_DESCRIPTION)));
TextView tvAlarmTime = (TextView)view.findViewById(R.id.tvAlarmTime);
tvAlarmTime.setText(MainActivity.formatTime(cursor.getInt(cursor.getColumnIndex(DB.KEY_ALARMHOUR)), cursor.getInt(cursor.getColumnIndex(DB.KEY_ALARMMIN))));
TextView tvDaysOfWeek = (TextView)view.findViewById(R.id.tvDaysOfWeek);
String daysOfWeek = "";
if (Boolean.valueOf(cursor.getString(cursor.getColumnIndex(DB.KEY_MONDAY)))) daysOfWeek = daysOfWeek + "Пн";
if (Boolean.valueOf(cursor.getString(cursor.getColumnIndex(DB.KEY_TUESDAY)))) if (daysOfWeek.length() > 0) daysOfWeek = daysOfWeek + ", Вт"; else daysOfWeek = daysOfWeek + "Вт";
if (Boolean.valueOf(cursor.getString(cursor.getColumnIndex(DB.KEY_WEDNESDAY)))) if (daysOfWeek.length() > 0) daysOfWeek = daysOfWeek + ", Ср"; else daysOfWeek = daysOfWeek + "Ср";
if (Boolean.valueOf(cursor.getString(cursor.getColumnIndex(DB.KEY_THURSDAY)))) if (daysOfWeek.length() > 0) daysOfWeek = daysOfWeek + ", Чт"; else daysOfWeek = daysOfWeek + "Чт";
if (Boolean.valueOf(cursor.getString(cursor.getColumnIndex(DB.KEY_FRIDAY)))) if (daysOfWeek.length() > 0) daysOfWeek = daysOfWeek + ", Пт"; else daysOfWeek = daysOfWeek + "Пт";
if (Boolean.valueOf(cursor.getString(cursor.getColumnIndex(DB.KEY_SATURDAY)))) if (daysOfWeek.length() > 0) daysOfWeek = daysOfWeek + ", Сб"; else daysOfWeek = daysOfWeek + "Сб";
if (Boolean.valueOf(cursor.getString(cursor.getColumnIndex(DB.KEY_SUNDAY)))) if (daysOfWeek.length() > 0) daysOfWeek = daysOfWeek + ", Вс"; else daysOfWeek = daysOfWeek + "Вс";
tvDaysOfWeek.setText(daysOfWeek);
cbEnable.setOnCheckedChangeListener(new OnCheckedChangeListener() { //Обработчик для чекбокса
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
db.open();
boolean res = db.changeAlarmState(rowID, isChecked);
cursor.requery();
db.close();
//Log.d(LOG_TAG, "изменение= " + res);
//Log.d(LOG_TAG, "Item " + rowID + " " + isChecked);
}
});
}
}[/syntax]
Нужно обработчик нажатия на checkBox вынести в MainActivity. Подскажите, как до него достучаться?