Question

J'essaie de créer un calendrier à l'aide du widget Galerie. J'ai une classe de vue du mois qui gère la création d'une vue pour un mois spécifique. Ma classe MonthGallery utilise la vue du mois comme vue enfant tandis que mon adaptateur de vue du mois crée les vues du mois pour la galerie du mois. Le problème que j'ai est d'essayer de mettre à jour l'adaptateur avec le mois précédent et suivant pendant que l'utilisateur fait défiler ou passe au mois précédent ou suivant. J'utilise la position donnée dans la galerie onItemSelectedListener pour ajouter des mois à l'avant et à l'arrière de l'adaptateur en fonction de cette position. Par exemple:

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

PROBLÈME
Une fois que l'utilisateur a fait défiler jusqu'à un autre mois, puis essaie de faire défiler jusqu'au premier mois, la galerie ne passe pas automatiquement à la sélection suivante. Dans l'adaptateur, lorsque addView (int month, int year) est appelé, il appellera notifyDataSetChanged () afin de mettre à jour la galerie avec le mois précédent ou suivant, mais cela semble provoquer un «accrochage» inattendu lors du défilement lent. Je ne sais pas comment structurer cela pour que le défilement soit fluide.

MODIFIER
J'utilise maintenant Gallery.setCallbackDuringFling (false) mais y a-t-il un moyen de désactiver le rappel onitemselected tout en faisant défiler la galerie, puis d'appeler onitemselected () une fois le défilement terminé?

Était-ce utile?

La solution

Galerie utilisée de Remplace le widget Galerieavec View existe-t-il?

a supprimé une ligne du onScroll()

postDelayed(mDisableSuppressSelectionChangedRunnable, SCROLL_TO_FLING_UNCERTAINTY_TIMEOUT);

Autres conseils

Est-ce que cela est garanti à propos de notifyDatasetChanged () appelé lorsque addView () est appelé

Je pense que vous pouvez vérifier cela ..

J'avais l'habitude d'appeler notifyDatasetChanged () immédiatement lorsque je touchais les vues à l'intérieur d'un adaptateur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top