Динамическое добавление данных вида в адаптер галереи Android

Я пытаюсь создать календарь с помощью виджета Галерея. У меня есть класс месячного обзора, который обрабатывает создание представления для определенного месяца. Мой класс MonthGallery использует monthview в качестве дочерних представлений, в то время как мой monthviewadapter создает месячные просмотры для monthgallery. Проблема, с которой я сталкиваюсь, заключается в попытке обновить адаптер на предыдущий и следующий месяц, пока пользователь выполняет прокрутку или переход к предыдущему или следующему месяцу. Я использую положение, указанное в галерее 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(), так что он обновляет галерею с предыдущим или следующим месяцем, но это вызывает неожиданный "щелчок" при медленной прокрутке. Просто не уверен, как структурировать это так, чтобы прокрутка была плавной.

РЕДАКТИРОВАТЬ
Я сейчас использую Gallery.setCallbackDuringFling(false), но есть ли способ отключить обратный вызов onitemselected во время прокрутки галереи, а затем вызвать onitemselected(), когда он закончил прокрутку?

2 ответа

Решение

used gallery from Имеется ли замена виджета Gallery с View переработкой?

удалил одну строку из onScroll()

postDelayed(mDisableSuppressSelectionChangedRunnable, SCROLL_TO_FLING_UNCERTAINTY_TIMEOUT);

Гарантируется ли это, что метод notifyDatasetChanged() вызывается при вызове addView()

Я думаю, вы можете проверить это..

Раньше я вызывал notifyDatasetChanged() сразу, когда я касался представлений внутри адаптера.

Другие вопросы по тегам