динамически добавлять данные просмотра в адаптер галереи Android - PullRequest
0 голосов
/ 17 января 2012

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

Ответы [ 2 ]

1 голос
/ 20 января 2012

используется галерея из Существует ли замена для виджета Галерея с рециркуляцией вида?

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

postDelayed(mDisableSuppressSelectionChangedRunnable, SCROLL_TO_FLING_UNCERTAINTY_TIMEOUT);
0 голосов
/ 17 января 2012

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

Думаю, вы можете проверить, что ..

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

...