Я пытаюсь создать календарь с помощью виджета Галерея. У меня есть класс месячного обзора, который обрабатывает создание представления для определенного месяца. Мой класс MonthGallery использует месячный вид в качестве дочерних представлений, в то время как мой monthviewadapter создает месячные просмотры для месячной галереи. Проблема, с которой я столкнулся, заключается в попытке обновить адаптер с помощью предыдущего и следующего месяца, пока пользователь выполняет прокрутку или переход к предыдущему или следующему месяцу. Я использую положение, указанное в галерее onItemSelectedListener, чтобы добавить месяцы к передней и задней части адаптера в зависимости от этой позиции. Например:
OnItemSelectedListener mGalleryOnItemSelectedListener = new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterview, View view, int position, long id) {
MonthView mv = (MonthView) view;
int month = mv.getMonth();
int year = mv.getYear();
updateMonthBar(month, year);
if ((position + 1) == mMonthViewGallery.getCount()) {
if (Calendar.DECEMBER == month) {
mMonthViewAdapter.addView(Calendar.JANUARY, year + 1);
} else {
mMonthViewAdapter.addView(month + 1, year);
}
mMonthViewGallery.setSelection(position);
}
if (0 == position) {
if (Calendar.JANUARY == month) {
mMonthViewAdapter.addViewToFront(Calendar.DECEMBER, year - 1);
} else {
mMonthViewAdapter.addViewToFront(month - 1, year);
}
mMonthViewGallery.setSelection(1);
}
}
ПРОБЛЕМА
После того, как пользователь прокрутил до другого месяца, а затем попытался прокрутить до первого месяца, галерея не будет автоматически привязываться к следующему выбору. В адаптере, когда вызывается addView (int month, int year), он вызывает notifyDataSetChanged (), так что он обновляет галерею с предыдущим или следующим месяцем, но это вызывает неожиданный «щелчок» при медленной прокрутке. Просто не уверен, как это структурировать, чтобы прокрутка была плавной.
EDIT
Сейчас я использую Gallery.setCallbackDuringFling (false), но есть ли способ отключить обратный вызов onitemselected при прокрутке галереи, а затем вызвать onitemselected () после завершения прокрутки?