Button eines Fragments innerhalb von ViewPager triggert onClickListener bei falscher Referenz

9

Tut mir leid wegen meines dummen Titels, ich werde ihn unten klar beschreiben:

Situation

Ich habe ein ViewPager mit 4 OnBoardingFragment s drin. Jedes Fragment hat genau dasselbe Layout, das inflated von derselben XML-Datei ist. Dieses Layout enthält eine Button , die ich btnNext genannt habe, und ich habe die OnClickListener dafür gesetzt.

Funktion getItem meines PagerAdapter

%Vor%

Funktionen von OnBoardingFragment :

%Vor%

Das Problem ist

Als meine App gestartet wurde, zeige ich zuerst zuerst Fragment , dann drückte ich die Methode Button und triggerte onItemClick() , und die Methode wurde auf die letzte Fragment .

Melden Sie sich an, wenn Sie create Fragment

erstellen %Vor%

Melden Sie sich an, wenn onClickListener() ausgelöst wurde

%Vor%

Melden Sie sich an, wenn btnNext initialisiert wurde:

%Vor%

Frage

Warum passiert das und wie löst man es?

    
mr.icetea 11.10.2016, 08:26
quelle

5 Antworten

2

Bitte beachten Sie das Beispiel im folgenden Link für die Verwendung von View Pager mit mehreren Fragmenten: Ссылка

    
Bhagya 19.10.2016 04:25
quelle
0

Wenn der Benutzer auf die Schaltfläche klickt, senden Sie dieses Ereignis zurück an die Aktivität (oder wo Sie eine Referenz des Viewpagers haben). Von dort aus sollten Sie prüfen, welches Fragment im viewpager sichtbar ist (siehe Bestimmen, wann sich ein ViewPager ändert Seiten und Wie kann man feststellen, wann das Fragment sichtbar wird? ViewPager ) und dann wissen Sie, was Sie mit diesem Ereignis tun können.

    
Yair Kukielka 15.10.2016 18:21
quelle
0

Sie können eine Listener-Schnittstelle verwenden, um das Fragment abzurufen und eine Methode zum Abrufen der Position zu erstellen und sie an den Ort zu senden, an dem Sie den viewpager deklariert haben  1. Erstellen Sie zunächst ein anonymes Objekt dieser Schnittstelle in diesem Fragment  2. Übergeben Sie dieses Objekt zweitens an PagerAdapter  3. Drittens können Sie dieses Objekt im PagerAdapter verwenden und die Methode aufrufen, die in der Schnittstelle mit der Fragmentposition verwendet wurde  4. Sie können den Fragment-Layout-Behandlungscode in die Methode innerhalb der anonymen inneren Klasse dieser Schnittstelle einfügen.

Bitte versuchen Sie es, es wird funktionieren. Ich hoffe, du kannst verstehen, was ich gesagt habe.

    
Jyothi 17.10.2016 11:15
quelle
0

Benutze case 3: mit einem break am Ende und in default , setze einfach eine einzige break und keine andere Aussage.

    
Amit Tiwari 19.10.2016 10:00
quelle
0

fügen Sie break-Anweisung im Standardblock hinzu und übergeben Sie auch argument end = false, falls 0,1,2

    
user2781544 20.10.2016 07:25
quelle