Seiten müssen den gesamten ViewPager2 füllen (benutze match_parent)
Lesezeit: 5 Minuten
Ich habe ein Artikellayout, in dem ich ein Bild, einen Produktnamen und ein Produktbild anzeige. Ich muss das Bild im Verhältnis 1:1,5 mithilfe des Constraint-Layouts anzeigen. Aber wenn ich ein kleines Bild lade, werden unten die Texte nicht angezeigt.
Und wenn ich match_parent durch wrap_content ersetze, stürzt die App mit folgendem Fehler ab: –
java.lang.IllegalStateException: Seiten müssen den gesamten ViewPager2 füllen (benutze match_parent)
Wenn Sie die Seitenhöhe ändern möchten, ändern Sie einfach die Höhe des Viewpagers.
– Benutzer3783123
11. Oktober 2019 um 13:12 Uhr
@ Mahesh Ich habe das gleiche Problem. Hast du die Lösung gefunden?
– androidStud
16. Oktober 2019 um 0:21 Uhr
@androidStud noch nicht
– Mahesh Babariya
16. Oktober 2019 um 5:25 Uhr
@MaheshBabariya Siehe meine Antwort unten.
– androidStud
17. Oktober 2019 um 0:56 Uhr
Ja, setzen Sie es auf match_parent und wenn Sie es verkleinern möchten, versuchen Sie es in der Ansicht oder mit dem Ansichtspager selbst.
– Tobias Reich
14. November 2019 um 11:27 Uhr
Ich habe herausgefunden, dass das Problem beim Aufblasen des Sichthalters liegt.
Ich hatte das gleiche Problem und löste es ändernd
ViewBinding.inflate(inflater)
zu
ViewBinding.inflate(inflater, parent, false)
Dies ist nicht die Antwort, viewPagger2 benötigte immer das Elementlayout, um der Höhe und Breite der Eltern zu entsprechen. Kontraindikationslayout korrigieren.
– Indra als Lesmana
25. Januar 2020 um 1:24 Uhr
Dies hat das Problem für mich behoben. Möglicherweise kann die Ansicht ohne richtigen Verweis auf die übergeordnete Ansichtsgruppe nicht mit match_parent übereinstimmen. Daher wird es als wrap_content interpretiert und löst den oben genannten Fehler aus.
– Alt-Kat
29. Oktober 2020 um 17:37 Uhr
Während ich mit diesem Problem kämpfte, fand ich heraus, was das Problem war. Mein Anwendungsfall war, dass ich androidx.viewpager2.widget.ViewPager2 verwendete und normale Ansichten in RecyclerView aufrief.
Wenn Sie den Fehler sorgfältig beobachten, sehen Sie in etwa Folgendes:
java.lang.IllegalStateException: Pages must fill the whole ViewPager2 (use match_parent)
at androidx.viewpager2.widget.ViewPager2$2.onChildViewAttachedToWindow(ViewPager2.java:170)
Die zweite Zeile ist der Schlüssel zum Hauptproblem. Wenn Sie ViewPager2.java öffnen, würden Sie sehen
private RecyclerView.OnChildAttachStateChangeListener enforceChildFillListener() {
return new RecyclerView.OnChildAttachStateChangeListener() {
@Override
public void onChildViewAttachedToWindow(@NonNull View view) {
RecyclerView.LayoutParams layoutParams =
(RecyclerView.LayoutParams) view.getLayoutParams();
if (layoutParams.width != LayoutParams.MATCH_PARENT
|| layoutParams.height != LayoutParams.MATCH_PARENT) {
throw new IllegalStateException(
"Pages must fill the whole ViewPager2 (use match_parent)");
}
}
@Override
public void onChildViewDetachedFromWindow(@NonNull View view) {
// nothing
}
};
}
Android verwendet nicht das in XML zugewiesene match_parent, um Ansichten anzuhängen. Möglicherweise werden zukünftige Verbesserungen in der nächsten Version von ViewPager2 vorgenommen.
Wie auch immer, um das Problem zu beheben, setzen Sie die Layout-Parameter vorerst explizit auf MATCH_PARENT.
Gelöst mit diesem view.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
– Vishal Kottarathil
30. April 2020 um 15:38 Uhr
Für mich habe ich das Problem gelöst, indem ich die obige Zeile verwendet habe, um Parameter in onCreateViewHolder des View-Pager-Adapters festzulegen.
– Ajith MA
19. November 2020 um 6:59 Uhr
Gute Erklärung und diese Lösung macht Sinn. Ich habe ein paar Stunden damit gekämpft und schließlich Ihre Lösung ausprobiert. In meiner speziellen Situation (ich verwende ComposeView im ViewPager) hat ComposeView aus irgendeinem Grund nicht die gesamte Seite belegt. Ich habe gerade die Zeile für ConstraintLayout int Die ViewHolder-Klasse hinzugefügt und es hat funktioniert.
– Artiom
14. Juni 2022 um 15:09 Uhr
Legen Sie Breite und Höhe in Ihrem Adapterelement von ViewPager2 match_parent fest
Ich stehe vor demselben Problem. Was ist, wenn ich nur die Breite als Umbruchinhalt verwenden möchte?
– Atif AbbAsi
3. Mai 2021 um 10:15 Uhr
Stellen Sie Ihr Adapterelement auf Match Parent ein und legen Sie den Wrap-Inhalt für die Viewpager-Breite fest
– Raana Yavari
5. Mai 2021 um 5:48 Uhr
Nikunj Paradva
Verwenden match_parent zu deinem viewholder Layout von ViewPager2
Ich habe den gleichen Fehler, nachdem ich das Problem manchmal in gefunden habe ViewPager2‘s adapter item, ich habe es von geändert wrap_content zu match_parentund es wurde behoben.
<ImageView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/iv_banner"
android:layout_width="match_parent"
android:layout_height="match_parent"/> <!--Change height here to match_parent-->
Du solltest so schreiben:
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val view: View = inflater.inflate(R.layout.yourlayout, parent, false)
view.layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)
return ViewHolder(view)
}
inner class ViewHolder(itemView: View) :
RecyclerView.ViewHolder(itemView) {
}
Arpit J.
Für mich war das Problem, dass Seiten (dh Eltern-/Root-Layout des Adapters) in ViewPager2 nicht match_parent waren, daher war der Fehler java.lang.IllegalStateException: Pages must fill the whole ViewPager2 (use match_parent)
Ali Zarei
viewpager2-Element sollte match_parent-Breite und -Höhe haben. Wenn Sie jedoch View Binding verwenden, sollten Sie das Layout wie Fragmente aufblasen:
ViewBinding.inflate(inflater, parent, false)
14386200cookie-checkSeiten müssen den gesamten ViewPager2 füllen (benutze match_parent)yes
Wenn Sie die Seitenhöhe ändern möchten, ändern Sie einfach die Höhe des Viewpagers.
– Benutzer3783123
11. Oktober 2019 um 13:12 Uhr
@ Mahesh Ich habe das gleiche Problem. Hast du die Lösung gefunden?
– androidStud
16. Oktober 2019 um 0:21 Uhr
@androidStud noch nicht
– Mahesh Babariya
16. Oktober 2019 um 5:25 Uhr
@MaheshBabariya Siehe meine Antwort unten.
– androidStud
17. Oktober 2019 um 0:56 Uhr
Ja, setzen Sie es auf match_parent und wenn Sie es verkleinern möchten, versuchen Sie es in der Ansicht oder mit dem Ansichtspager selbst.
– Tobias Reich
14. November 2019 um 11:27 Uhr