पृष्ठों को पूरा ViewPager2 भरना होगा (माचिस का उपयोग करें)


11

मेरे पास एक आइटम लेआउट है जहां मैं एक छवि, उत्पाद का नाम और उत्पाद छवि प्रदर्शित करता हूं। मुझे बाधा लेआउट का उपयोग करके 1: 1.5 राशन में छवि प्रदर्शित करनी चाहिए। लेकिन जब मैं एक छोटी छवि लोड करता हूं, तो नीचे दिए गए पाठ प्रदर्शित नहीं होते हैं।

नीचे आइटम एक्सएमएल का मेरा कोड है: -

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/coordinatorLayoutCartRoot"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <com.jackandphantom.circularimageview.RoundedImage
            android:id="@+id/imageViewSlider"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:scaleType="centerCrop"
            app:layout_constraintBottom_toTopOf="@id/tvTitle"
            app:layout_constraintDimensionRatio="WH,1:1.4"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:rounded_radius="0"
            tools:src="@tools:sample/avatars" />

        <TextView
            android:id="@+id/tvTitle"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:padding="4dp"
            android:text="Fitted crew neck sweater"
            android:textColor="@color/colorBlack"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@id/imageViewSlider" />

        <TextView
            android:id="@+id/tvPrice"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:padding="4dp"
            android:text="$34.00"
            android:textColor="@color/colorBlack"
            android:textStyle="bold"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@id/tvTitle" />

    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>
  1. लंबी छवि के साथ आउटपुट: - https://i.imgur.com/QVnljX6.png
  2. छोटी छवि के साथ आउटपुट: - https://i.imgur.com/0ZwkVwE.png

और अगर मैं मैच_परेंट को wra_content से बदलूं, तो ऐप नीचे से क्रैश हो जाएगा: -

java.lang.IllegalStateException: पेजों को पूरा ViewPager2 भरना होगा (match_parent का उपयोग करें)


यदि आप पृष्ठ की ऊँचाई बदलना चाहते हैं, तो बस दृश्य ऊंचाई को बदलें।
user3783123

@ महेश मैं एक ही मुद्दा रहा हूँ। क्या आपको इसका हल मिला?
AndroidStud


@MaheshBabariya नीचे मेरी प्रतिक्रिया देखें
AndroidStud

हाँ, इसे match_parent पर सेट करें और यदि आप इसे सिकोड़ना चाहते हैं, तो इसे दृश्य के अंदर या दृश्य पेजर के साथ करने का प्रयास करें।
टोबियास

जवाबों:


10

मुझे पता चला है कि समस्या दर्शकों को लुभाने में है।

मेरे पास एक ही मुद्दा था और इसे बदलते हुए हल किया

ViewBinding.inflate(inflater)

सेवा

ViewBinding.inflate(inflater, parent, false)

1
इसका उत्तर नहीं है, viewPagger2 को हमेशा माता-पिता की ऊंचाई और चौड़ाई से मेल खाने के लिए आइटम लेआउट की आवश्यकता होती है। कंट्रास्टेलआउट को ठीक करें।
इंद्र आसन

5

इस समस्या से जूझते हुए, मुझे लगा कि समस्या क्या है। मेरा उपयोग मामला था मैं androidx.viewpager2.widget.ViewPager2 का उपयोग कर रहा था, और RecyclerView में सामान्य दृश्य कॉल कर रहा था।

यदि आप त्रुटि को ध्यान से देखते हैं तो आपको कुछ ऐसा दिखाई देगा:

 java.lang.IllegalStateException: Pages must fill the whole ViewPager2 (use match_parent)
    at androidx.viewpager2.widget.ViewPager2$2.onChildViewAttachedToWindow(ViewPager2.java:170)

दूसरी लाइन मुख्य मुद्दे की कुंजी है। यदि आप ViewPager2.java खोलते हैं तो आप देखेंगे

 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 विचारों को संलग्न करने के लिए xml में दिया गया match_parent नहीं ले रहा है। हो सकता है कि भविष्य में सुधार ViewPager2 की अगली रिलीज में किया जाएगा।

वैसे भी, अब इसे ठीक करने के लिए, MATCH_PARENT की खोज के रूप में लेआउट परमेस सेट करें।

 view.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));

यह दृश्य दृश्य पृष्ठ चिल्ड को पकड़े हुए माता-पिता का दृश्य है।

आपके मामले में यह androidx.constraintlayout.widget.ConstraintLayout होगा।

 view.setLayoutParams(new ConstraintLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));

इस दृश्य का उपयोग करके हल किया गया ।setLayoutParams (नया LinearLayout.LayoutParams (ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCHPPARENT));
विशाल कोटरथिल

1

मेरे लिए, ViewPager2 में मुद्दे पृष्ठ (यानी एडॉप्टर के मूल / रूट लेआउट) से मेल नहीं खाते थे इसलिए त्रुटि थी java.lang.IllegalStateException: Pages must fill the whole ViewPager2 (use match_parent)


1

मुझे अब एक ही समस्या का सामना करना पड़ा, आपके एडॉप्टर आइटम की चौड़ाई और ऊंचाई का मिलान_परेंट होना चाहिए


0

मुझे भी यही समस्या थी। मैंने स्लाइडर को प्रदर्शित करने के लिए ViewPager2 का उपयोग किया। लेकिन इसका XML आइटम MATCH_PARENT नहीं था। उस परिवर्तन के बाद समस्या का समाधान हो गया।


0

viewpager2 आइटम में match_parent चौड़ाई और ऊंचाई होनी चाहिए। लेकिन अगर आप व्यू बाइंडिंग का उपयोग कर रहे हैं तो आपको ऐसे टुकड़े जैसे लेआउट को बढ़ाना चाहिए:

ViewBinding.inflate(inflater, parent, false)

0

मुझे भी इसी मुद्दे का सामना करना पड़ा, और समाधान ऊंचाई को आपके आइटम दृश्य के रूप में सेट करना है अर्थात एडेप्टर वर्ग में उपयोग होने वाले लेआउट का MATCH_PARENT के रूप में ऊँचाई होनी चाहिए

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.