Frage

Ich versuche, mit dem Galerie-Widget einen Kalender zu erstellen. Ich habe eine Monatsansichtsklasse, die das Erstellen einer Ansicht für einen bestimmten Monat behandelt. Meine MonthGallery-Klasse verwendet die Monatsansicht als untergeordnete Ansicht, während mein Monatsansichtsadapter die Monatsansichten für die Monatsgalerie erstellt. Das Problem, das ich habe, ist der Versuch, den Adapter mit dem vorherigen und nächsten Monat zu aktualisieren, während der Benutzer einen Bildlauf durchführt oder zum vorherigen oder nächsten Monat wechselt. Ich verwende die in der Galerie onItemSelectedListener angegebene Position, um abhängig von dieser Position Monate an der Vorder- und Rückseite des Adapters hinzuzufügen. Zum Beispiel:

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

PROBLEM
Sobald der Benutzer zu einem anderen Monat gescrollt hat und dann versucht, zum ersten Monat zu scrollen, springt die Galerie nicht automatisch zur nächsten Auswahl. Wenn im Adapter addView (int month, int year) aufgerufen wird, wird notifyDataSetChanged () aufgerufen, sodass die Galerie mit dem vorherigen oder nächsten Monat aktualisiert wird. Dies scheint jedoch zu einem unerwarteten "Einrasten" beim langsamen Scrollen zu führen. Ich bin mir nur nicht sicher, wie ich das so strukturieren soll, dass das Scrollen reibungslos verläuft.

BEARBEITEN
Ich verwende jetzt Gallery.setCallbackDuringFling (false), aber gibt es eine Möglichkeit, den Rückruf onitemselected zu deaktivieren, während Sie durch die Galerie scrollen, und dann onitemselected () aufzurufen, wenn der Bildlauf abgeschlossen ist?

War es hilfreich?

Lösung

verwendete Galerie von Ersetzt das Galerie-Widgetmit View Recycling gibt es?

hat eine Zeile aus dem onScroll() entfernt

postDelayed(mDisableSuppressSelectionChangedRunnable, SCROLL_TO_FLING_UNCERTAINTY_TIMEOUT);

Andere Tipps

Wird dies garantiert, wenn notifyDatasetChanged () aufgerufen wird, wenn addView () aufgerufen wird?

Ich denke, Sie können das überprüfen ..

Früher habe ich notifyDatasetChanged () sofort aufgerufen, wenn ich die Ansichten in einem Adapter berührte.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top