Zwischen den Fragmenten gleiten

8

Ich entwickle gerade eine App und versuche derzeit ScreenSlide hinzuzufügen. Ich habe es geschafft, dies mit einem Tutorial zu tun, aber das übliche Verschieben zwischen x pages ist nicht ganz so was ich suche.

Mit dem unten angegebenen Code kann ich zwischen 5 Seiten gleiten, aber die Seiten sind in einer geraden Linie ausgerichtet und Sie können nicht von der ersten Seite direkt in die 5. und umgekehrt gehen. In meiner App habe ich 4 Seiten. Wenn ich nach links rutsche, wechsle ich zwischen den ersten beiden Seiten, wenn ich nach rechts rutsche, wechsle ich zwischen zwei letzten Seiten. Auf dem Bild unten können Sie sehen, wie mein aktueller Code die Seite wechselt und darunter - mein Ziel.

%Vor%

[UPDATE]

Ich habe es geschafft, einen Code zu schreiben, der es mir ermöglicht, zwischen sechs verschiedenen Seiten stufenlos nach rechts zu gleiten. Die linke Seite ist jedoch begrenzt - ich kann nur auf die erste Seite gleiten (also wenn ich auf der ersten Seite bin, nachdem ich dreimal nach rechts gefahren bin, kann ich nur 3 Zyklen rückwärts machen). Ich denke, ich bin sehr nahe daran, die Lösung zu finden. Irgendwelche Ideen?

MainActivity.java

%Vor%

ScreenSlidePageFragment.java

%Vor%     
Oleksandr Firsov 24.09.2015, 16:48
quelle

5 Antworten

3

Eine mögliche Problemumgehung ist nicht die Verwendung von viewpager, sondern die Erstellung eines eigenen benutzerdefinierten Sliders. Ich habe diese Lösung gefunden, da ViewPager sehr unflexibel ist, zum Beispiel wenn Sie versuchen, etwas wie Facebook Page app zu machen. Nachteile: Sie müssen alle Berührungen und den Lebenszyklus verwalten.

Eine andere einfachere Lösung dafür ist im Grunde die folgende API, wenn ich die Frage richtig verstehe, sollte es genug sein. ViewPager.setCurrentItem

    
Iliiaz Akhmedov 29.09.2015 19:30
quelle
3

Das würde ich tun.

Da Sie eine endliche Menge an Bildschirmen haben, würde ich ein Array machen, um jede Instanz des ScreenSlidePageFragment unter einem entsprechenden Index zu speichern. Sie können also eine Instanz von diesem Array abrufen, indem Sie "position" verwenden. Auf diese Weise können Sie getItem function für etwas wie

nutzen %Vor%

Hinweis: Code nicht getestet

Im Grunde genommen müssen Sie die Logik schreiben, um eine vorhandene Instanz eines Fragments basierend darauf zurückzugeben, wo Sie sich gerade befinden und welche Position angefordert wird.

    
C0D3LIC1OU5 29.09.2015 20:30
quelle
2

Sie können versuchen ViewPager.setCurrentItem

Wenn Sie zu Seite

navigieren möchten %Vor%

Wenn Sie zu einer Seite ohne fließenden Bildlauf navigieren möchten

%Vor%     
Kishan Vaghela 06.10.2015 10:32
quelle
1

Ich denke, es ist möglich zu tun. 1. Setzen Sie die Elementanzahl von ViewPager auf Integer.MAX_VALUE und das aktuelle Element auf Integer.MAX_VALUE / 2. Es gibt dir die Möglichkeit, eine falsche unendliche Schriftrolle zu erstellen. 2. Realisieren Sie Ihre Logik abhängig vom Fragment der aktuellen Position. Es ist einfach, wenn Sie sie in Ihrem Adapter speichern:

%Vor%
  1. Und der schwierigste Teil, denke ich. Da ViewPager mindestens eine Ansicht auf jeder Seite zwischenspeichert und Sie nicht wissen, auf welche Weise der Benutzer nur auf eine Art scrollen kann, wird das erscheinende Fragment gemäß der Scroll-Seite manuell initialisiert und neu initialisiert. Verwenden Sie ein geschachteltes Fragment in jedem ItemFragmentRoot, das ich bereits erwähnt habe. Alles hängt davon ab, wie stark Ihre Ansichtshierarchie ist.

Ich kann später mehr Code schreiben, wenn Sie brauchen.

    
Dmytro 05.10.2015 22:26
quelle
1

Folge diesem Tutorial, das ist das beste, ich habe es in meinem AP benutzt. Android Sliding Tabs mit Material Design

    
Vipin Kumar 06.10.2015 15:18
quelle