স্ক্রোলভিউয়ের মধ্যে পুনর্ব্যবহারযোগ্য দৃশ্যটি সহজে স্ক্রল করছে না


179

আমার অ্যাপ্লিকেশানের জন্য আমি এমন একটি RecyclerViewঅভ্যন্তর ব্যবহার করছি ScrollViewযেখানে এই লাইব্রেরিটিRecyclerView ব্যবহার করে এর সামগ্রীর উপর ভিত্তি করে উচ্চতা রয়েছে । স্ক্রোলিং কাজ করছে তবে আমি যখন স্ক্রোল করব তখন এটি সহজে কাজ করছে না । আমি নিজেই যখন স্ক্রোল করব তখন এটি সহজেই স্ক্রোল করছে।RecyclerViewScrollView

আমি সংজ্ঞায়িত করতে কোডটি ব্যবহার করছি RecyclerView:

LinearLayoutManager friendsLayoutManager = new LinearLayoutManager(getActivity().getApplicationContext(), android.support.v7.widget.LinearLayoutManager.VERTICAL, false);
mFriendsListView.setLayoutManager(friendsLayoutManager);
mFriendsListView.addItemDecoration(new DividerItemDecoration(getActivity().getApplicationContext(), null));

RecyclerViewমধ্যে ScrollView:

<android.support.v7.widget.RecyclerView
    android:layout_marginTop="10dp"
    android:layout_marginBottom="10dp"
    android:id="@+id/friendsList"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

আমার জন্য এই সমাধান কাজ: stackoverflow.com/a/32390370/7308789 তোমাকে ধন্যবাদ
Houssin Boulla

1
@ দাহাদেব আপনার ক্ষেত্রে ঠিক কী কাজ করছে না দয়া করে সে সম্পর্কে আরও বিস্তারিত বলুন। এছাড়াও, মনে হচ্ছে আপনার ক্ষেত্রে কোনও সরবরাহিত সমাধান কাজ করে নি, এটি কি তাই?
প্রবীণ ডিভরানিয়া

androidx.constraintlayout.widget.ConstraintLayoutকোনও জটিল বাস্তবায়ন ছাড়াই আপনার সমস্যার সমাধান করবে যা ব্যবহার করুন
সাসওয়াতা

উত্তর:


379

করার চেষ্টা করুন:

RecyclerView v = (RecyclerView) findViewById(...);
v.setNestedScrollingEnabled(false);

বিকল্প হিসাবে, আপনি সমর্থন নকশা লাইব্রেরি ব্যবহার করে আপনার বিন্যাস পরিবর্তন করতে পারেন। আমার অনুমান যে আপনার বর্তমান লেআউটটি এমন কিছু:

<ScrollView >
   <LinearLayout >

       <View > <!-- upper content -->
       <RecyclerView > <!-- with custom layoutmanager -->

   </LinearLayout >
</ScrollView >

আপনি এটিকে সংশোধন করতে পারেন:

<CoordinatorLayout >

    <AppBarLayout >
        <CollapsingToolbarLayout >
             <!-- with your content, and layout_scrollFlags="scroll" -->
        </CollapsingToolbarLayout >
    </AppBarLayout >

    <RecyclerView > <!-- with standard layoutManager -->

</CoordinatorLayout >

তবে এটি নেওয়া দীর্ঘতর রাস্তা এবং আপনি যদি কাস্টম লিনিয়ার লেআউট ম্যানেজারের সাথে ঠিক থাকেন তবে কেবল পুনর্ব্যক্তিক দৃশ্যে নেস্টেড স্ক্রোলিংটি অক্ষম করুন।

সম্পাদনা করুন (4/3/2016)

v 23.2সমর্থন লাইব্রেরি মুক্তির এখন একটি কারখানা "মোড়ানো বিষয়বস্তু" সব ডিফল্ট বৈশিষ্ট্য অন্তর্ভুক্ত করা হয়েছে LayoutManagerসে। আমি এটি পরীক্ষা করিনি, তবে আপনি সম্ভবত এটি ব্যবহার করছেন সেই লাইব্রেরির চেয়ে পছন্দ করা উচিত।

<ScrollView >
   <LinearLayout >

       <View > <!-- upper content -->
       <RecyclerView > <!-- with wrap_content -->

   </LinearLayout >
</ScrollView >

16
এই উত্তরটি যোগ করার জন্য: setNestedScrollingEnabled(false)শুধুমাত্র কাজ যখন আমি বাইরে সুইচড ScrollViewএকটি জন্য NestedScrollViewপরিবর্তে।
রিচার্ড লে ম্যাসুরিয়ার

11
আমার জন্য, setNestedScrollingEnabled(false)আমাকে আমার RecyclerViewঅভ্যন্তর দিয়ে মসৃণ স্ক্রোলিং ফিরিয়ে দিয়েছে ScrollView- ধন্যবাদ! কিন্তু আমি এখনও বুঝতে পারছি না যে কেন এটি কাজ করে ...? নেস্টেড স্ক্রোলিং মিথ্যা সেট করার সত্যিকার অর্থে কী বোঝায়?
মাইক্রো

33
নোট করুন যে android:nestedScrollingEnabled="false"কেবলমাত্র v.setNestedScrollingEnabled(false)21 ++ এর জন্য কাজ করে তবে <21 এর জন্য ঠিক আছে।
এরিক বি।

3
ভবিষ্যতে উল্লেখের জন্য, যদি কেহ সম্মুখীন হচ্ছে RecyclerViewwrap_content ইস্যু ভিতরে ScrollViewযে শুধুমাত্র Marshmallow ঘটে / (API এর 23, 24) ডিভাইস, আমার কার্যসংক্রান্ত পরীক্ষা বাদামের তক্তি stackoverflow.com/a/38995399/132121
হোসেন খান

2
এই মুহুর্তে আমি এখন যে সমস্যার সমাধান করছি তার একটি নেতিবাচক দিকটি হ'ল রিসাইক্লারভিউ এতে অনস্ক্রোললিস্টারে ইভেন্টগুলি গ্রহণ করবে না। যা আমার প্রয়োজন কারণ আমি যখন পুনর্ব্যবহারকারীতে কেবলমাত্র নির্দিষ্ট পরিমাণ আইটেম থাকি তখন আমি আরও ডেটা আনতে চাই
ড্যানিয়েল ডাব্লু

82

আমার কেবল এটি ব্যবহার করা দরকার:

mMyRecyclerView.setNestedScrollingEnabled(false);

আমার onCreateView()পদ্ধতিতে

অনেক ধন্যবাদ!


26

আপনি এইভাবে ব্যবহার করতে পারেন:

আপনার পুনর্ব্যবহারযোগ্য এক্সএমএল ফাইলটিতে এই লাইনটি যুক্ত করুন:

android:nestedScrollingEnabled="false"

বা জাভা কোডে:

RecyclerView.setNestedScrollingEnabled(false);

আশা করি এটি সাহায্য করেছে।


10
এপি 21+ এর প্রয়োজন
মুহাম্মদ রিয়াজ

11

আপনি এক্সএমএল এবং প্রোগ্রামগতভাবে উভয় উপায়ে চেষ্টা করতে পারেন। তবে আপনি যে সমস্যাটির মুখোমুখি হতে পারেন তা XML দিয়ে এটি করার মাধ্যমে (API 21 এর নীচে) কাজ করবে না। সুতরাং এটি আপনার ক্রিয়াকলাপ / অংশে প্রোগ্রামগতভাবে সেট করা ভাল।

এক্সএমএল কোড:

<android.support.v7.widget.RecyclerView
      android:id="@+id/recycleView"
      android:layout_width="match_parent"
      android:visibility="gone"
      android:nestedScrollingEnabled="false"
      android:layout_height="wrap_content"
      android:layout_below="@+id/linearLayoutBottomText" /> 

প্রোগ্রামেটিক্যালি:

 recycleView = (RecyclerView) findViewById(R.id.recycleView);
 recycleView.setNestedScrollingEnabled(false);

6

স্ক্রোল ভিউয়ের পরিবর্তে নেস্টেড স্ক্রোল ভিউ ব্যবহার করা আমার সমস্যার সমাধান করে

<LinearLayout> <!--Main Layout -->
   <android.support.v4.widget.NestedScrollView>
     <LinearLayout > <!--Nested Scoll View enclosing Layout -->`

       <View > <!-- upper content --> 
       <RecyclerView >


     </LinearLayout > 
   </android.support.v4.widget.NestedScrollView>
</LinearLayout>

5

আমার অনুরূপ সমস্যা ছিল (আমি গুগল প্লেস্টোর ডিজাইনের মতো নেস্টেড রিসাইক্লারভিউস তৈরির চেষ্টা করেছি)। এর সাথে মোকাবিলা করার সর্বোত্তম উপায় হ'ল শিশু রিসাইক্লারভিউগুলিকে সাবক্লাসিং করে এবং 'onInterceptTouchEvent' এবং 'onTouchEvent' পদ্ধতিগুলিকে ওভাররাইড করে। এই ইভেন্টগুলি কীভাবে আচরণ করে এবং শেষ পর্যন্ত স্ক্রোল করে তার পুরো নিয়ন্ত্রণ আপনি পান।


3

নেস্টডস্ক্রোলভিউয়ের সাথে স্ক্রোলভিউ প্রতিস্থাপনের ফলে নীচে মসৃণ স্ক্রোলিং ঘটে।


1

আপনি যদি আপনার চাইল্ডভিউতে ভিডিওভিউ বা ভারী ওজনের উইজেট ব্যবহার করছেন তবে আপনার পুনর্ব্যবহারযোগ্য wrap_content ভিউটিকে উচ্চতার সাথে নেস্টডস্ক্রোলভিউয়ের মধ্যে রাখুনmatch_parent স্ক্রলিং আপনার ইচ্ছা মতো নিখুঁতভাবে কাজ করবে।

অবগতির জন্য,

<android.support.v4.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <android.support.v7.widget.RecyclerView
            android:layout_width="match_parent"
            android:nestedScrollingEnabled="false"
            android:layout_height="wrap_content"
            android:clipToPadding="false" />

</android.support.v4.widget.NestedScrollView>

ধন্যবাদ মাইক্রো এটি আপনার ইঙ্গিত থেকে ছিল!

কার্তিক


1

সমস্ত উত্তরের সংক্ষিপ্তসার (সুবিধা এবং অসুবিধা)

একক পুনর্ব্যবহারযোগ্য দর্শন জন্য

আপনি এটি সমন্বয়কারী বিন্যাসের ভিতরে ব্যবহার করতে পারেন।

সুবিধা - এটি সম্পূর্ণ পুনর্ব্যবহারযোগ্য আইটেম লোড করবে না। এত মসৃণ লোডিং।

অসুবিধা - আপনি সমন্বয়কারী বিন্যাসের মধ্যে দুটি পুনর্ব্যবহারযোগ্য দৃশ্য লোড করতে পারবেন না - এটি স্ক্রোলিংয়ের সমস্যা উত্পন্ন করে

রেফারেন্স - https://stackoverflow.com/a/33143512/3879847

ন্যূনতম সারি সহ একাধিক পুনর্ব্যবহারের জন্য

আপনি নেস্টডস্ক্রোলভিউয়ের মধ্যে লোড করতে পারেন

সুবিধা - এটি মসৃণভাবে স্ক্রোল করবে

অসুবিধা - এটি পুনরায় ব্যবহারকারীর সমস্ত সারি লোড করে যাতে আপনার ক্রিয়াকলাপটি বিলম্বের সাথে খোলে

রেফারেন্স - https://stackoverflow.com/a/33143512/3879847

বড় সারিগুলির সাথে একাধিক পুনর্ব্যবহারের জন্য (100 এরও বেশি)

আপনাকে অবশ্যই পুনর্ব্যবহারযোগ্য দর্শন সহ যেতে হবে।

সুবিধা - মসৃণভাবে স্ক্রোল করুন, সহজেই লোড করুন

অসুবিধা - আপনার আরও কোড এবং যুক্তি লিখতে হবে

মাল্টি-ভিউহোল্ডারদের সহায়তায় প্রতিটি পুনর্ব্যবহারযোগ্য প্রধান পুনর্ব্যবহারযোগ্য ভিউয়ের মধ্যে লোড করুন

উদা:

MainRecyclerview

-ChildRecyclerview1 (ViewHolder1)

-ChildRecyclerview2 (ViewHolder2)

-ChildRecyclerview3 (ViewHolder3) 

-Any other layout   (ViewHolder4)

মাল্টি-ভিউহোল্ডারের জন্য রেফারেন্স - https://stackoverflow.com/a/26245463/3879847


0

এক্সএমএল কোড:

<android.support.v4.widget.NestedScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <android.support.v7.widget.RecyclerView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:clipToPadding="false" />

        </android.support.v4.widget.NestedScrollView>

জাভা কোডে:

  recycleView = (RecyclerView) findViewById(R.id.recycleView);
     recycleView.setNestedScrollingEnabled(false);


0
<?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"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v4.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent">

        <android.support.constraint.ConstraintLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent">

            <android.support.constraint.ConstraintLayout
                android:id="@+id/constraintlayout_main"
                android:layout_width="match_parent"
                android:layout_height="@dimen/layout_width_height_fortyfive"
                android:layout_marginLeft="@dimen/padding_margin_sixteen"
                android:layout_marginRight="@dimen/padding_margin_sixteen"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintRight_toRightOf="parent">

                <TextView
                    android:id="@+id/textview_settings"
                    style="@style/textviewHeaderMain"
                    android:gravity="start"
                    android:text="@string/app_name"
                    app:layout_constraintLeft_toLeftOf="parent"
                    app:layout_constraintRight_toRightOf="parent" />

            </android.support.constraint.ConstraintLayout>

            <android.support.constraint.ConstraintLayout
                android:id="@+id/constraintlayout_recyclerview"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginStart="@dimen/padding_margin_zero"
                android:layout_marginTop="@dimen/padding_margin_zero"
                android:layout_marginEnd="@dimen/padding_margin_zero"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintRight_toRightOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/constraintlayout_main">

                <android.support.v7.widget.RecyclerView
                    android:id="@+id/recyclerview_list"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:nestedScrollingEnabled="false"
                    app:layout_constraintLeft_toLeftOf="parent"
                    app:layout_constraintRight_toRightOf="parent" />

            </android.support.constraint.ConstraintLayout>

        </android.support.constraint.ConstraintLayout>

    </android.support.v4.widget.NestedScrollView>

</android.support.constraint.ConstraintLayout>

এই কোডটি কনস্ট্রেন্টলয়েট অ্যান্ড্রয়েডের জন্য কাজ করছে


0

Kotlin

সেট isNestedScrollingEnabledথেকে falseযে RecyclerView যে স্ক্রলিং দৃশ্য অধীনে জন্য

val recyclerView = findViewById<RecyclerView>(R.id.recyclerView)
recyclerView.isNestedScrollingEnabled = false

এক্সএমএল লেআউট ব্যবহার করা হচ্ছে

<android.support.v7.widget.RecyclerView
    android:layout_marginTop="10dp"
    android:layout_marginBottom="10dp"
    android:id="@+id/friendsList"
    android:layout_width="match_parent"
    android:nestedScrollingEnabled="false"
    android:layout_height="wrap_content" />
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.