Pergunta

Estou tentando criar uma agenda usando o widget Galeria. Eu tenho uma classe de exibição do mês que lida com a criação de uma exibição para um mês específico. Minha classe MonthGallery usa a exibição de mês como suas exibições filhas, enquanto meuadaptador de exibição de mês cria as exibições de mês para a galeria de mês. O problema que estou tendo é tentar atualizar o adaptador com o mês anterior e seguinte enquanto o usuário rola ou joga para o mês anterior ou seguinte. Eu uso a posição fornecida na galeria onItemSelectedListener para adicionar meses à frente e atrás do adaptador, dependendo desta posição. Por exemplo:

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);
        }
    }

PROBLEMA
Depois que o usuário rola para outro mês e tenta rolar para o primeiro mês, a galeria não passa automaticamente para a próxima seleção. No adaptador, quando addView (int month, int year) é chamado, ele chamará NoticeDataSetChanged () para que atualize a galeria com o mês anterior ou seguinte, mas isso parece causar o "encaixe" inesperado ao rolar lentamente. Só não tenho certeza de como estruturar isso para que a rolagem seja suave.

EDITAR
Agora estou usando Gallery.setCallbackDuringFling (false), mas há uma maneira de desativar o retorno de chamada onitemselected ao rolar a galeria e chamar onitemselected () quando terminar de rolar?

Foi útil?

Solução

galeria usada de Substitui o widget da Galeriacom Ver a reciclagem existe?

removeu uma linha do onScroll()

postDelayed(mDisableSuppressSelectionChangedRunnable, SCROLL_TO_FLING_UNCERTAINTY_TIMEOUT);

Outras dicas

Isso é garantido sobre notificarDatasetChanged () chamado quando addView () chamado

Acho que você pode verificar isso ..

Eu costumava chamar notificarDatasetChanged () imediatamente quando tocava nas visualizações dentro de um adaptador.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top