পৃষ্ঠাগুলি অবশ্যই পুরো ভিউপাগার 2 পূরণ করবে (ম্যাচ_প্যারেন্ট ব্যবহার করুন)


11

আমার একটি আইটেম লেআউট রয়েছে যেখানে আমি একটি চিত্র, পণ্যের নাম এবং পণ্যের চিত্র প্রদর্শন করি। আমি অবশ্যই প্রতিরোধ লেআউটটি ব্যবহার করে 1: 1.5 রেশনে চিত্রটি প্রদর্শন করব। তবে যখন আমি একটি ছোট চিত্র লোড করি, নীচে পাঠ্য প্রদর্শিত হয় না।

XML আইটেমের নীচে আমার কোড রয়েছে:

<?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

এবং যদি আমি ম্যাচ_প্যারেন্টকে মোড়ানোর_পরিষ্কারের সাথে প্রতিস্থাপন করি তবে অ্যাপ্লিকেশনটি নীচের ত্রুটির সাথে ক্র্যাশ করেছে: -

java.lang.IllegalStateException: পৃষ্ঠাগুলি অবশ্যই পুরো ভিউপাগার 2 পূরণ করতে হবে (ম্যাচ_প্যারেন্ট ব্যবহার করুন)


আপনি যদি পৃষ্ঠার উচ্চতা পরিবর্তন করতে চান তবে কেবলমাত্র পৃষ্ঠাগুলির উচ্চতা পরিবর্তন করুন।
ব্যবহারকারী3783123

@ মাহেশ আমারও একই সমস্যা রয়েছে। সমাধান কি খুঁজে পেয়েছেন?
অ্যান্ড্রয়েড স্টুড

@ অ্যান্ড্রয়েড স্টুড এখনও নেই
মহেশ বাবরিয়া

@ মাহেশবাবাড়িয়া নীচে আমার প্রতিক্রিয়া দেখুন।
অ্যান্ড্রয়েড স্টুড

হ্যাঁ, এটি ম্যাচ-প্যারেন্টে সেট করুন এবং আপনি যদি এটি সঙ্কুচিত করতে চান, তবে ভিউর ভিতরে বা ভিউ পেজারের সাথে নিজেই চেষ্টা করে দেখুন।
টোবিয়াস রিচ

উত্তর:


10

আমি খুঁজে পেয়েছি যে সমস্যাটি ভিউ হোল্ডারকে ফুলে উঠছে।

আমি একই সমস্যা ছিল এবং এটি পরিবর্তন সমাধান

ViewBinding.inflate(inflater)

প্রতি

ViewBinding.inflate(inflater, parent, false)

1
এটি উত্তর নয়, ভিউপ্যাগার 2 সর্বদা পিতামাতার উচ্চতা এবং প্রস্থের সাথে মেলে আইটেম বিন্যাসের প্রয়োজন। contrainstlayout ঠিক করুন।
ইন্দ্র হিসাবে লেসমানা

5

এই সমস্যাটির সাথে লড়াই করার সময়, আমি সমস্যাটি কী তা বুঝতে পেরেছিলাম। আমার ব্যবহারের কেসটি হ'ল আমি অ্যান্ড্রয়েডএক্স.ভিউপেজার 2.উইজেট.ভিউপেজার 2 ব্যবহার করছিলাম এবং রিসাইক্লারভিউতে সাধারণ ভিউগুলি কল করছিলাম।

আপনি যদি ত্রুটিটি সাবধানতার সাথে লক্ষ্য করেন তবে আপনি এরকম কিছু দেখতে পাবেন:

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

দ্বিতীয় লাইন মূল ইস্যুর মূল চাবিকাঠি। আপনি ভিউপাগার 2. জাভা খুললে আপনি দেখতে পাবেন

 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
        }
    };
}

অ্যান্ড্রয়েড ভিউগুলি সংযুক্ত করার জন্য এক্সএমএলে নির্ধারিত ম্যাচ_পিতাটিকে নিচ্ছে না। ভবিষ্যতের উন্নতিগুলি ভিউপ্যাজার 2 এর পরবর্তী প্রকাশে করা হবে।

যাইহোক, এখনই এটির সমাধানের জন্য, 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));

এই ভিউ.সেটআলাউটপ্যারামগুলি (নতুন লিনিয়ারলআউট.লায়আউটপ্যারামস (ভিউগ্রুপ। লেআউটপ্যারামস.ম্যাচচ্যাপারেন্ট, ভিউগ্রুপ। লেআউটপ্যারামস.ম্যাচএচপিএপিএনএএনটি)) ব্যবহার করে সমাধান করা হয়েছে;
বিশাল কোত্তরথিল

1

আমার জন্য, সমস্যাটি পৃষ্ঠাগুলি ছিল (যেমন অ্যাডাপ্টারের প্যারেন্ট / রুট লেআউট) ভিউপ্যাজার 2 তে মিল ছিল না_ প্যারেন্ট তাই ত্রুটিটি ছিল java.lang.IllegalStateException: Pages must fill the whole ViewPager2 (use match_parent)


1

আমি এখন একই সমস্যার মুখোমুখি হয়েছি, আপনার অ্যাডাপ্টার আইটেমের প্রস্থ এবং উচ্চতাটি ম্যাচ_প্যারেন্ট হতে হবে


0

আমারও একই সমস্যা ছিল। আমি স্লাইডারটি প্রদর্শন করতে ভিউপেজার 2 ব্যবহার করেছি। তবে এর এক্সএমএল আইটেমটি MATCH_PARENT ছিল না। পরিবর্তনের পরে সমস্যাটি সমাধান করা হয়েছিল।


0

ভিউপ্যাজার 2 আইটেমের মিল_পিতা এবং প্রস্থ এবং উচ্চতা হওয়া উচিত। তবে যদি আপনি ভিউ বাইন্ডিং ব্যবহার করছেন তবে আপনার লেআউট যেমন টুকরো টুকরো করা উচিত:

ViewBinding.inflate(inflater, parent, false)

0

আমিও একই সমস্যার মুখোমুখি হয়েছি এবং সমাধানটি হ'ল আপনার আইটেমের ভিউটির ম্যাচ_প্যারেন্ট হিসাবে উচ্চতা নির্ধারণ করা যেমন অ্যাডাপ্টার ক্লাসে ব্যবহৃত লেআউটের উচ্চতা অবশ্যই MATCH_PARENT হিসাবে থাকতে হবে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.