ম্যাচ_ প্যারেন্ট প্রস্থটি রিসাইক্লার ভিউতে কাজ করে না


135

আমার পুনর্ব্যবহারযোগ্য ভিউ এবং আইটেমটির ম্যাচ_প্যারেন্ট প্রস্থ রয়েছে তবে ফলাফলটি হ'ল: এখানে চিত্র বর্ণনা লিখুন

    <view
    class="android.support.v7.widget.RecyclerView"
    android:layout_width="match_parent"

এবং আইটেম:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:fab="http://schemas.android.com/apk/res-auto"
android:id="@+id/ll_itm"
android:orientation="horizontal"
android:layout_width="match_parent"

সম্পূর্ণ:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:fab="http://schemas.android.com/apk/res-auto"
android:id="@+id/ll_itm"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:weightSum="100"
android:gravity="right"
>


<Button
    android:layout_width="0dp"
    android:layout_weight="15"
    android:layout_height="fill_parent"
    android:text="ملاحظات"
    android:id="@+id/button" />

<LinearLayout
    android:layout_width="0dp"
    android:layout_height="fill_parent"
    android:layout_weight="20"
    android:gravity="center"
    >
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        >

        <com.getbase.floatingactionbutton.FloatingActionButton
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            fab:fab_plusIconColor="#ff56ff83"
            fab:fab_colorNormal="@color/d_red"
            fab:fab_colorPressed="#ff5c86ff"
            fab:fab_size="mini"
            fab:fab_icon="@drawable/ic_remove_white"
            android:id="@+id/fab_rmv" />
        <esfandune.ir.elmikarbordiardakan.other.CustomTxtView
            android:layout_weight="25"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:text="0"
            android:gravity="right|center_vertical"
            android:id="@+id/txt_takhir_itm" />
        <com.getbase.floatingactionbutton.FloatingActionButton
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            fab:fab_plusIconColor="@color/colorprimarylight"
            fab:fab_colorNormal="@color/colorprimarydark"
            fab:fab_colorPressed="@color/colorprimary"
            fab:fab_size="mini"
            fab:fab_icon="@drawable/ic_add_white"
            android:id="@+id/fab_add" />

    </LinearLayout>
</LinearLayout>
    <Spinner
        android:layout_width="0dp"
        android:layout_height="fill_parent"
        android:layout_weight="10"
        android:id="@+id/sp_nomre_itm"

        android:entries="@array/degrees"/>


<LinearLayout
    android:layout_width="0dp"
    android:layout_height="fill_parent"
    android:layout_weight="10"
    android:gravity="center"
    >
    <!--LinearLayout baraye ine ke nameshod fab ro weight behosh dad-->
    <com.getbase.floatingactionbutton.FloatingActionButton
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        fab:fab_plusIconColor="#ff56ff83"
        fab:fab_colorNormal="@color/d_green"
        fab:fab_colorPressed="@color/d_orange"
        fab:fab_size="normal"
        fab:fab_icon="@drawable/ic_done_white"
        android:id="@+id/fab_hazr" />



</LinearLayout>
<esfandune.ir.elmikarbordiardakan.other.CustomTxtView
    android:layout_weight="5"
    android:layout_width="0dp"
    android:layout_height="fill_parent"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:text="100"
    android:gravity="right|center_vertical"
    android:id="@+id/txt_ghybtNumber_itm" />

<esfandune.ir.elmikarbordiardakan.other.CustomTxtView
        android:layout_weight="30"
        android:layout_width="0dp"
        android:layout_height="fill_parent"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="عباسعلی ملاحسینی اردکانی"
        android:gravity="right|center_vertical"
        android:id="@+id/txt_title_itm"
    android:layout_marginRight="10dp"
    />

<view
    android:layout_width="0dp"
    android:layout_height="fill_parent"
    android:layout_weight="10"
    class="de.hdodenhof.circleimageview.CircleImageView"
    android:id="@+id/view"
    android:src="@drawable/mmrdf"
   />
</LinearLayout>

উত্তর:


433

আপনার অ্যাডাপ্টারে যেখানে আপনি আইটেমটি স্ফীত করছেন onCreateViewHolderসেখানে inflateকলটির দ্বিতীয় প্যারামিটার null?

যদি তাই হয় তবে এটিতে ফাংশনের স্বাক্ষরের parentপ্রথম পরামিতিটি এটিতে পরিবর্তন করুন onCreateViewHolder

View rootView = LayoutInflater.from(context).inflate(R.layout.itemLayout, parent, false);

আপনার যদি দ্বিতীয় প্যারামিটারটি দরকার হয় nullতবে যখন আপনি স্ফীতকরণ সম্পর্কিত ভিউ রেফারেন্স পাবেন, নিম্নলিখিতটি করুন

View rootView = LayoutInflater.from(context).inflate(R.layout.itemLayout, null, false);
RecyclerView.LayoutParams lp = new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
rootView.setLayoutParams(lp);
return new RecyclerViewHolder(rootView);

1
আমার পক্ষে কাজ করে না: আমি যদি আইটেমটির রুটভিউটি প্রস্থ = "ম্যাচ_পিতা" তে সেট করি তবে এটি "কাজ করে" যদি আমি উদাহরণস্বরূপ এটি 500 ডিপি সেট করি। কোন ধারণা ? ঠিক আছে, এটি লিনিয়ারলআউটে কাজ করে না তবে আইটেমের উপর একটি আত্মীয়-লেআউটের সাথে কাজ করে ... wtf?
কোকরিকো

5
স্যরি, এটি রিলেটিভ লেআউটের সাথে যেমন কাজ করে, আমি কেবল লিনিয়ারলআউটকে রিলেটিভলআউটে পরিবর্তন করি। তবে রিসাইক্লারভিউটি ম্যাচ_প্যারেন্ট ছিল এবং আইটেম রুটভিউ (তাই লিনিয়ারলআউট )ও ম্যাচ_প্যারেন্ট ছিল এবং এটি কার্যকর হয়নি। প্রথমবার আমি এর মুখোমুখি হয়েছিলাম।
কোকরিকো

1
ওহ দুর্দান্ত, এই কাজ করে..এক ঘন্টা পরে আমার চুল টানছে।
Zhi Kai

4
হ্যাঁ পূর্বে উল্লিখিত হিসাবে কোনও কারণে এটি লিনিয়ারলআউটের সাথে কাজ করে নি এবং এই ফিক্সটির সাথে এটি কোনও রিলেটিভলআউটে স্যুইচ করা কৌশলটি মনে হয়েছে।
নিক মরিচ

11
এটি লিনিয়ার্লেআউট বা কনস্ট্রেনলেআউট নিয়ে কাজ করে না। আমাকে
রিলেটিভলেআউটে

18

অনক্রিয়েটভিউহোল্ডার (...) এর অভ্যন্তরে অ্যাডাপ্টারের পদ্ধতি যেখানে আপনি ভিউটি ফুটিয়ে তুলছেন .. আপনাকে ভিউগ্রুপকে পিতামাতার হিসাবে সংজ্ঞায়িত করতে হবে his এটি আপনি অনক্রিটভিউহোল্ডার (...) পদ্ধতির 1 ম প্যারামিটার থেকে পাবেন।

দ্বিতীয় প্যারামিটারের নীচে লাইনটি দেখুন আমি ভিউগ্রুপটি পার করছি। এটি স্বয়ংক্রিয়ভাবে তার পিতামাতার সাথে দর্শনের সাথে মিলবে:

rowView=inflater.inflate(R.layout.home_custom_list, parent,false);

/// সম্পূর্ণ কোড নীচে

public View onCreateViewHolder(ViewGroup parent, int position) {
    // TODO Auto-generated method stub
    View rowView;
        LayoutInflater inflater=(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        rowView=inflater.inflate(R.layout.home_custom_list, parent,false);

8

আমি ব্যবহার করছিলেন FrameLayoutসঙ্গে MATCH_PARENTপ্রস্থের জন্য এবং সঙ্গে একই আচরণ দেখছিলাম RecyclerView+ + LinearLayoutManageronCreateViewHolderকলব্যাকটিতে নিম্নলিখিতগুলি না করা পর্যন্ত উপরের পরিবর্তনগুলির কোনওটিই আমার পক্ষে কার্যকর হয়নি :

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    // create a new view
    View v = LayoutInflater.from(parent.getContext())
                           .inflate(R.layout.note_layout, parent, false);
    v.setLayoutParams(new RecyclerView.LayoutParams(
          ((RecyclerView) parent).getLayoutManager().getWidth(),
          context.getResources()
                 .getDimensionPixelSize(R.dimen.note_item_height)));

    return new ViewHolder(v);
}

স্পষ্টতই মনে হচ্ছে রিস্যাকারভিউ বাস্তবায়নের জন্য বাগের মতো (আমি অনুমান করছি)।


ওভাররাইডিং লেআউটপ্রেমগুলি হ'ল একমাত্র সমাধান যা আমাকে সহায়তা করেছিল। কেউ কি জানেন যে এটি রিসাইকেলার ভিউতে বাগ আছে? গুগল বাগ ট্র্যাকারের একটি লিঙ্কের জন্য কৃতজ্ঞ হবে।
সোশিয়াল

5

আপনি যখন অ্যাডাপ্টারে আপনার আইটেমটির জন্য লেআউট প্যারাম সেট করেন তখন এটি ব্যবহার করে দেখুন।

 View viewHolder= LayoutInflater.from(parent.getContext())
            .inflate(R.layout.item, parent, false);
 viewHolder.setLayoutParams(new RecyclerView.LayoutParams(RecyclerView.LayoutParams.MATCH_PARENT, RecyclerView.LayoutParams.WRAP_CONTENT));
 ViewOffersHolder viewOffersHolder = new ViewOffersHolder(viewHolder);
 return viewOffersHolder;

5

আমি এই মত ঠিক করা ছিল। আমার ক্ষেত্রে ক্রিয়াকলাপের লেআউট ফাইলটিতে সমস্যা কারণ আমি রুট ক্রিয়াকলাপের লেআউট হিসাবে কনস্ট্রেন্টলয়েট ব্যবহার করছি you আপনার ক্ষেত্রেও এটি হতে পারে।

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <include
        android:id="@+id/toolBar"
        layout="@layout/toolbar_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <FrameLayout
        android:id="@+id/fragment_container"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:background="@color/accent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@id/toolBar" />
</android.support.constraint.ConstraintLayout>

2
এটি বিশ্বাস করা শক্ত, তবে কেবল আমার চারপাশের কনস্ট্রেন্টলআউটকে একটি লিনিয়ারলআউট দ্বারা প্রতিস্থাপন করা আমার পক্ষে এটিও সমাধান করেছে ...
fjc

ম্যাচ_প্যারেন্টটি কনস্ট্রেন্টলআউটয়ের সরাসরি বাচ্চাদের জন্য ব্যবহার করা উচিত নয়। পরিবর্তে, সীমাবদ্ধতা / ডান / নীচে / শীর্ষ বৈশিষ্ট্যগুলির সাথে 0 ডিপি ব্যবহার করুন।
DoruAdryan

3

আমার ক্ষেত্রে, সমস্যাটি RecyclerViewএক্সএমএল ঘোষণায় layout_widthছিল , এটি ছিল 0dp যার অর্থ ম্যাচ_কন্ট্রেন্টস, যখন আমি এটিকে পরিবর্তন করি match_parent, আইটেমগুলি সমস্ত RecyclerViewপ্রস্থ পূরণ করতে শুরু করে :

<androidx.recyclerview.widget.RecyclerView
            android:id="@+id/recyclerView"
            android:layout_width="0dp"  <-- changed this to "match_parent"
            android:layout_height="0dp"
            android:layout_marginBottom="45dp"
            android:background="@android:color/transparent"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintHeight_default="wrap"
            app:layout_constraintHeight_max="360dp"
            app:layout_constraintHeight_min="60dp"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toBottomOf="@id/header"/>

2

আমি এটি দিয়ে সমাধান করেছি:

 myInflatedRowLayout.getLayoutParams().width = vg.getWidth();

এটি MATCH_PARENTএর প্রকৃত প্রস্থের সাথে প্রতিস্থাপন করছে RecyclerView


1

এটি আমার পক্ষে কাজ করেছে।

এটি প্রতিস্থাপন

   View view = View.inflate(parent.getContext(), R.layout.row_timeline, null);
   return new TimeLineViewHolder(view, viewType);

এটা দ্বারা

 View rootView = LayoutInflater.from(context).inflate(R.layout.row_timeline, null, false);
        RecyclerView.LayoutParams lp = new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        rootView.setLayoutParams(lp);
        return new TimeLineViewHolder(rootView, viewType);

0

আপনার সম্পূর্ণ কোডটি দেখতে পাচ্ছেন না, তবে অনুমান করতে পারেন যে আপনার লিনিয়ারলআউটের অভ্যন্তরের কিছু ভিউ ' wrap_content'। ' android:layout_weight="1"' ব্যবহার করে আপনার একটি বা তাদের কিছুকে প্রস্থে প্রসারিত করতে হবে

আপডেট: আপনার অনেকগুলি রিলান্ড্যান্ট রয়েছে layout_weight। তাদের সমস্ত ' wrap_content' তৈরি করুন এবং তাদের মধ্যে একটির জন্য যুক্ত করুন layout_weight=1- শেষ কাস্টম টেক্সটভিউয়ের জন্য। এইভাবে, এটি সমস্ত ফাঁকা জায়গা দখল করবে।

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