Startposition des PagerAdapters

Lesezeit: 3 Minuten

Benutzer-Avatar
Kirill Kulakow

Ich verwende das folgende Beispiel, um meinen viewPager zu implementieren:
http://code.google.com/p/viewpagerexample/issues/list

Das Problem bei diesem Beispiel ist, dass ich nicht herausfinden kann, wie ich meine Startposition festlegen soll, die Standardstartposition ist 0. Grundsätzlich möchte ich nicht kontrollieren können, ob links oder rechts eine verfügbare Ansicht vorhanden ist.

Gibt es eine Möglichkeit, die aktuelle Position des Kontrollzentrums anzuzeigen? gibt es einen besseren Weg, es zu tun? ist es möglich, es kreisförmig zu machen?

  • Überprüfen Sie dies unter stackoverflow.com/a/53031553/4797289

    – Rasoul Miri

    28. Oktober 2018 um 12:36 Uhr

Ich habe einen Weg gefunden, seine Position festzulegen, was außerhalb der Klasse geschieht:

 awesomePager = (ViewPager) findViewById(R.id.awesomepager);
 awesomePager.setAdapter(awesomeAdapter);
 awesomePager.setCurrentItem(CurrentPosition);

und es kann begrenzt werden, indem ich die Anzahl der Gegenstände berechne, die ich hineinpassen möchte

  • beachten Sie, dass wenn awesomeAdapter von einem Cursor/LoaderManager unterstützt wird, müssen Sie vorsichtig sein, wann setCurrentItem wird aufgerufen, um zu vermeiden, den Fokus zu stehlen (zu spät) oder die Seite überhaupt nicht zu verschieben (zu früh) – siehe dies

    – Rymo

    12. Juni 2014 um 14:46 Uhr

  • hat bei mir nicht funktioniert, weil meine anderen Fragmente zu diesem Zeitpunkt noch nicht fertig sind und ich eine Ausnahme habe, da meine App versucht hat, eine Variable aus der zu verwenden currentPosition Fragment, das noch nicht erstellt wurde

    – Zwi

    18. April 2016 um 19:04 Uhr

  • Funktioniert perfekt. Das Einstellen des View-Pagers, wenn das Fragment fertig ist, funktioniert gut. Versuchen Sie dies, wenn das Fragment fertig ist und Sie die aktuelle Position zur Verfügung haben. Danke @kirill

    – Naeem Ibrahim

    25. Oktober 2016 um 13:04 Uhr


  • Gibt es eine Möglichkeit, ViewPager von der Ende? Ich meine wie in RecyclerViewwenn Sie einrichten new LinearLayoutManager(..., inverse=true) . Was ich will, ist: ViewPager springt sofort zum letzten Element, ohne dass mittendrin Fragmente hochgehen

    – Murmeln

    10. Februar 2017 um 11:54 Uhr


  • @murt es ist ziemlich spät, aber falls jemand das gleiche Problem hat, vorbei false würde dem Benutzer den Übergang nicht zeigen, der passiert: viewPager.setCurrentItem(newPosition, false);

    – Yousef Gamal

    5. Oktober 2019 um 1:17 Uhr

Ich habe festgestellt, dass der Adapter seine Fragmente wiederverwendet, wenn Sie die Aktivität (Ausrichtungsänderung) mit ViewPager mit FragmentStatePagerAdapter neu erstellen. Der Weg, es zu stoppen ist:

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    if (viewPager != null) {
        // before screen rotation it's better to detach pagerAdapter from the ViewPager, so
        // pagerAdapter can remove all old fragments, so they're not reused after rotation.
        viewPager.setAdapter(null);
    }
    super.onSaveInstanceState(savedInstanceState);
}

aber nach der Aktivitätserneuerung öffnet ViewPager immer zuerst Seite 0 und setCurrentItem (CurrentPosition); funktioniert nicht. Fix für das Wechseln der Seite nach Verzögerung:

new Handler().postDelayed(new Runnable() {
    @Override
    public void run() {
        viewPager.setCurrentItem(newPosition);
    }
}, 100);

  • Die Verzögerung wird tatsächlich nach a benötigt recreate() call! 🙂

    – anni

    13. Januar 2018 um 15:16 Uhr

Benutzer-Avatar
Heli

Um mit dem letzten Fragment zu beginnen, habe ich Folgendes getan:

PagerAdapter pagerAdapter = new PagerAdapter();
viewPager.setAdapter(pagerAdapter);
viewPager.setCurrentItem(pagerAdapter.getCount() - 1);

Ich bin auf ein Problem gestoßen, bei dem, wenn ich das aktuelle Element einstelle, bevor ich den Adapter einstelle, das erste Element, das ich zurückbekomme, immer das an Position 0 ist.

Stellen Sie sicher, dass Sie Folgendes tun:

awesomePager.setAdapter(awesomeAdapter);
awesomePager.setCurrentItem(CurrentPosition);

und nicht:

awesomePager.setCurrentItem(CurrentPosition);
awesomePager.setAdapter(awesomeAdapter);

Benutzer-Avatar
Suhail k Khan

Ich habe ein Array mit einer Größe von mehr als 1000 und im dynamischen Viewpager stand ich beim ersten Laden vor Leftswipe. Der folgende Code löste dies und führte zu einem reibungslosen Scrollen:

@Override
onResume(){
   super.onResume();
   viewPager.setCurrentItem(newPosition);
}

Benutzer-Avatar
Leebeedev

Ich verwende 3 Fragmente und beim Starten meiner App das zweite (Mitte)-Fragment wird standardmäßig angezeigt. Ich verwende nur die onResume-Funktion und alles funktioniert hervorragend.

@Override
protected void onResume() {
    super.onResume();
    m_viewPager.setCurrentItem(1);
}

Benutzer-Avatar
Yousef Gamal

Verwenden viewPager.setCurrentItem(newPosition); zeigt dem Benutzer den Übergang von der Startseite zur newPositionum das zu verhindern und das zu zeigen newPosition direkt, als wäre es der Ausgangspunkt, fügte ich hinzu false zum zweiten Parameter etwa so:

int newPosition = pages.size()-1; // Get last page position

viewPager.setCurrentItem(newPosition, false); // 2nd parameter (false) stands for "smoothScroll"

1276930cookie-checkStartposition des PagerAdapters

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy