Pregunta

Estoy intentando crear un calendario usando el widget Galería. Tengo una clase de vista mensual que se encarga de crear una vista para un mes específico. Mi clase MonthGallery usa la vista de mes como sus vistas secundarias, mientras que mi adaptador de vista de mes crea las vistas de mes para la galería de mes. El problema que tengo es intentar actualizar el adaptador con el mes anterior y el siguiente mientras el usuario se desplaza o se desplaza al mes anterior o al mes siguiente. Utilizo la posición dada en la galería onItemSelectedListener para agregar meses al frente y al dorso del adaptador dependiendo de esta posición. Por ejemplo:

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
Una vez que el usuario se ha desplazado a otro mes y luego intenta desplazarse al primer mes, la galería no se ajusta automáticamente a la siguiente selección. En el adaptador, cuando se llama a addView (int mes, int año), llamará a notifyDataSetChanged () para que actualice la galería con el mes anterior o el siguiente, pero esto parece causar un "chasquido" inesperado mientras se desplaza lentamente. No estoy seguro de cómo estructurar esto para que el desplazamiento sea fluido.

EDITAR
Ahora estoy usando Gallery.setCallbackDuringFling (false) pero ¿hay alguna manera de deshabilitar la devolución de llamada onitemselected mientras me desplazo por la galería y luego llamar a onitemselected () cuando haya terminado de desplazarse?

¿Fue útil?

Solución

galería usada de Reemplaza el widget de la galeríacon View reciclaje existe?

eliminó una línea de onScroll()

postDelayed(mDisableSuppressSelectionChangedRunnable, SCROLL_TO_FLING_UNCERTAINTY_TIMEOUT);

Otros consejos

¿Está garantizado sobre el llamado notifyDatasetChanged () cuando se llama a addView ()?

Creo que puedes comprobarlo ...

Solía llamar a notifyDatasetChanged () inmediatamente cuando toco las vistas dentro de un adaptador.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top