Bagaimana cara menonaktifkan scroll RecyclerView?

221

Saya tidak bisa menonaktifkan bergulir di RecyclerView. Saya mencoba menelepon rv.setEnabled(false)tetapi saya masih bisa menggulir.

Bagaimana saya bisa menonaktifkan gulir?

Zsolt Safrany
sumber
1
Apa gunanya menggunakan RecyclerViewjika Anda tidak ingin menggulir?
CommonsWare
16
@CommonsWare, saya hanya ingin menonaktifkannya untuk sementara, misalnya, ketika saya sedang melakukan animasi khusus dengan salah satu anaknya.
Zsolt Safrany
1
Ah, oke, itu masuk akal. Saya mungkin telah menempatkan transparan Viewdi atas RecyclerView, beralih di antara VISIBLEdan GONEsesuai kebutuhan, tetapi dari pendekatan Anda tampaknya masuk akal.
CommonsWare
Semoga ini membantu menemukan solusi yang lebih baik.
Saiteja Parsi
1
@ CommonsWare, inilah yang saya butuhkan untuk, misalnya. Saya perlu menampilkan gambar dalam RecyclerView satu per satu, tanpa gambar yang terlihat sebagian, hanya satu di viewport saya. Dan ada panah di sebelah kiri dan di sebelah kanan tempat pengguna dapat menavigasi. Bergantung pada gambar apa yang saat ini ditampilkan (dari berbagai jenis), beberapa hal di luar RecyclerView dipicu. Ini desain yang diinginkan pelanggan kami.
Varvara Kalinina

Jawaban:

368

Anda harus mengganti manajer tata letak recycleview Anda untuk ini. Dengan cara ini hanya akan menonaktifkan pengguliran, tidak ada fungsi lainnya. Anda masih dapat menangani klik atau acara sentuh lainnya. Sebagai contoh:-

Asli:

 public class CustomGridLayoutManager extends LinearLayoutManager {
 private boolean isScrollEnabled = true;

 public CustomGridLayoutManager(Context context) {
  super(context);
 }

 public void setScrollEnabled(boolean flag) {
  this.isScrollEnabled = flag;
 }

 @Override
 public boolean canScrollVertically() {
  //Similarly you can customize "canScrollHorizontally()" for managing horizontal scroll
  return isScrollEnabled && super.canScrollVertically();
 }
}

Di sini menggunakan flag "isScrollEnabled" Anda dapat mengaktifkan / menonaktifkan fungsi gulir dari tampilan daur ulang Anda untuk sementara waktu.

Juga:

Timpa penerapan Anda yang sudah ada untuk menonaktifkan pengguliran dan mengizinkan mengklik.

 linearLayoutManager = new LinearLayoutManager(context) {
 @Override
 public boolean canScrollVertically() {
  return false;
 }
};
Saurabh Garg
sumber
2
Ini harus menjadi jawaban yang benar karena ini menonaktifkan gulir sambil memungkinkan saya mengklik.
Jared Burrows
10
Menonaktifkan pengguliran pada LayoutMangers default seharusnya sudah ada, pengguna API tidak harus melakukan ini. Terima kasih atas jawabannya!
Martin O'Shea
1
Bagaimana jika saya ingin menonaktifkan pengguliran hanya dari item tertentu? Berarti Anda dapat menggulir ke bawah (atau ke atas) ke sana, tetapi kemudian diblokir, sampai saya mengaktifkannya kembali?
pengembang android
2
Ini juga menonaktifkan smoothScrollToPosition
Mladen Rakonjac
4
Anda menambahkan objek versi kotlin: LinearLayoutManager (ini) {override fun canScrollVertically (): Boolean {return false}}
amorenew
149

Jawaban sebenarnya adalah

recyclerView.setNestedScrollingEnabled(false);

Info lebih lanjut dalam dokumentasi

Bozic Nebojsa
sumber
39
Ini hanya akan menonaktifkan penggulungan bersarang, tidak semua pengguliran. Secara khusus, jika RecyclerView Anda berada di ScrollView tetapi tidak memenuhi layar, ScrollView tidak akan menggulir (konten cocok di layar), dan Anda akan mendapatkan UI gulir di RecyclerView Anda (efek akhir daftar ketika mencoba menggulir misalnya ) meskipun tidak akan menggulir ketika menjadi lebih besar. Memperluas LayoutManager benar-benar berfungsi.
personne3000
3
@ personne3000 Saya percaya recyclerView.setHasFixedSize (true) melakukan pekerjaan untuk itu. Sunting: Saya juga menggunakan ini bersamaan dengan setFillViewport (true) jadi saya tidak benar-benar yakin yang mana dari keduanya yang memperbaikinya.
mDroidd
5
Ini berfungsi baik untuk saya, tetapi "RecyclerView" saya berada di dalam tata letak Fragmen menggunakan "ScrollView", jadi saya harus mengubah "ScrollView" oleh "NestedScrollView", seperti yang dijelaskan di sini: stackoverflow.com/a/38088902/618464
educoutinho
1
Ingatlah untuk menggunakan nama kelas penuh untuk NestedScrollView: android.support.v4.widget.NestedScrollView, seperti dijelaskan di sini, oleh chessdork: stackoverflow.com/questions/37846245/...
gustavoknz
Setelah menghabiskan 4 jam untuk mencari tahu apa yang salah ini menyelesaikan masalah saya. Dalam kasus saya, saya menggunakan recyclerview di dalam MotionLayout. Dan saya hanya menambahkan area gesek untuk menarik dengan menambahkan gerakan: touchAnchorId = "@ id / swipe_area". Ini bekerja secara normal tetapi juga dipicu ketika menyentuh area kosong recyclerview. Berhati-hatilah saat menggunakan motionLayout dengan elemen swipable lainnya.
O. Kumru
73

Jawaban NYATA NYATA adalah: Untuk API 21 dan lebih tinggi:

Tidak perlu kode java. Anda dapat mengatur android:nestedScrollingEnabled="false" dalam xml:

<android.support.v7.widget.RecyclerView
     android:id="@+id/recycler"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:clipToPadding="true"
     android:nestedScrollingEnabled="false"
     tools:listitem="@layout/adapter_favorite_place">
Milad Faridnia
sumber
11
Saya pikir ini harus menjadi jawaban yang diterima, tanpa usaha di kelas Anda dapat menonaktifkan gulir dan sentuhan diperbolehkan dalam tata letak.
VipiN Negi
Apa untuk API di bawah 21 ??
Mouaad Abdelghafour AITALI
@pic untuk API yang lebih rendah, Anda dapat menggunakan: recyclerView.setNestedScrollingEnabled (false);
Milad Faridnia
1
Jawaban yang diterima untuk saya.
Fernando Torres
1
ini adalah jawaban terbaik dan paling mudah, yang juga menghindari polusi kode yang tidak perlu, dan pola perluasan kelas tanpa akhir.
Raphael C
52

Ini sedikit solusi hackish tetapi berhasil; Anda dapat mengaktifkan / menonaktifkan gulir di menu RecyclerView.

Ini adalah RecyclerView.OnItemTouchListenermencuri kosong setiap acara sentuh sehingga menonaktifkan target RecyclerView.

public class RecyclerViewDisabler implements RecyclerView.OnItemTouchListener {

    @Override
    public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
        return true;
    }

    @Override
    public void onTouchEvent(RecyclerView rv, MotionEvent e) {

    }

    @Override
    public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {

    }
}

Menggunakannya:

RecyclerView rv = ...
RecyclerView.OnItemTouchListener disabler = new RecyclerViewDisabler();

rv.addOnItemTouchListener(disabler);        // disables scolling
// do stuff while scrolling is disabled
rv.removeOnItemTouchListener(disabler);     // scrolling is enabled again 
Zsolt Safrany
sumber
8
Apakah ini juga menonaktifkan item mengklik?
Jahir Fiquitiva
@JahirFiquitiva Ya. "Ini adalah RecyclerView.OnItemTouchListener kosong mencuri setiap peristiwa sentuhan"
Max
1
ini juga menonaktifkan gulir tampilan orangtua
Jemshit Iskenderov
Ini menonaktifkan item klik juga
Muhammad Riyaz
1
Mengapa menggunakan solusi peretasan (dengan efek samping) ketika ada solusi bersih? Ganti saja LayoutManager (lihat jawaban lain)
personne3000
37

Ini bekerja untuk saya:

  recyclerView.setOnTouchListener(new View.OnTouchListener() {
      @Override
      public boolean onTouch(View v, MotionEvent event) {
          return true;
      }
  });
alxgarcia
sumber
11
Ini menonaktifkan semua sentuhan.
Jared Burrows
1
Trik yang bagus! Untuk mengaktifkan kembali, cukup atur ulang onTouch onTouchListener untuk mengembalikan false
HendraWD
uhm, tapi ada peringatanCustom view 'RecyclerView' has setOnTouchListener called on it but does not override performClick
HendraWD
Jika Anda menerima peringatan yang sama yang @HendraWD sebutkan dalam komentar di atas maka lihat jawaban pertanyaan ini: stackoverflow.com/questions/46135249/…
Nicolás Carrasco
1
Alih-alih mengembalikan true, dan karenanya menonaktifkan semua jenis acara sentuh, hanya return e.getAction() == MotionEvent.ACTION_MOVE;alih-alih return true;hanya acara gulir / geser yang dibatalkan.
Toufic Batache
15

Anda dapat menonaktifkan pengguliran dengan membekukan RecyclerView Anda.

Membekukan: recyclerView.setLayoutFrozen(true)

Untuk mencairkan: recyclerView.setLayoutFrozen(false)

Virat Singh
sumber
1
Perhatikan: tampilan anak tidak diperbarui saat RecyclerView dibekukan. Saya perlu menonaktifkan gulir ketika ada cukup ruang di layar untuk menampilkan semua item. Oh ... Betapa bagus Android API untuk tugas ini ...
Oleksandr Nos
1
Dihentikan dalam API 28
OhhhThatVarun
13

Buat kelas yang memperluas kelas RecyclerView

public class NonScrollRecyclerView extends RecyclerView {

    public NonScrollRecyclerView(Context context) {
        super(context);
    }

    public NonScrollRecyclerView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    public NonScrollRecyclerView(Context context, @Nullable AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int heightMeasureSpec_custom = MeasureSpec.makeMeasureSpec(
                Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, heightMeasureSpec_custom);
        ViewGroup.LayoutParams params = getLayoutParams();
        params.height = getMeasuredHeight();
    }
}

Ini akan menonaktifkan acara gulir, tetapi bukan acara klik

Gunakan ini di XML Anda lakukan hal berikut:

  <com.yourpackage.xyx.NonScrollRecyclerView 
     ...
     ... 
  />
Ashish
sumber
Terima kasih! Ini semua diperlukan ketika kami ingin memungkinkan tampilan pendaur ulang untuk mengambil penuh sesuai dengan isi tanpa menggulir internal. :)
Rahul Rastogi
Tetapi jika tampilan pendaur ulang ini dalam tampilan gulir (egScrollView) maka manajer tata letak harus mengesampingkan metode canScrollVertically () mengembalikan false dari itu.
Rahul Rastogi
@RahulRastogi menggunakan NestedScrollView alih-alih ScrollView
Ashish
Hai @AshishMangave, Tolong beri tahu cara mengaktifkannya lagi secara terprogram
Shruti
@ Shruti kita tidak bisa melakukan ini secara terprogram. bcz kami langsung mengganti metode onMeasure recyclerview. Anda dapat mencoba recyclerView.setNestedScrollingEnabled (false) ini. Ini akan membantu Anda
Ashish
11

Jika Anda hanya menonaktifkan hanya fungsi scroll dari RecyclerViewmaka Anda dapat menggunakan setLayoutFrozen(true);metode RecyclerView. Tapi itu tidak bisa menonaktifkan acara sentuh.

your_recyclerView.setLayoutFrozen(true);
Ekta Bhawsar
sumber
metode ini sudah usang. bisakah Anda menyarankan yang lain?
Aiyaz Parmar
Dihentikan dalam API 28
OhhhThatVarun
9
recyclerView.addOnItemTouchListener(new RecyclerView.SimpleOnItemTouchListener() {
        @Override
        public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
            // Stop only scrolling.
            return rv.getScrollState() == RecyclerView.SCROLL_STATE_DRAGGING;
        }
    });

rajesh
sumber
Ini membatalkan pengguliran smoothScrollToPosition () saat disentuh.
ypresto
Ini adalah solusi terbaik bagi saya karena memungkinkan pengguliran secara terprogram tetapi menghindari pengguliran pengguna.
Miguel Sesma
7

Ada jawaban yang benar-benar sederhana.

LinearLayoutManager lm = new LinearLayoutManager(getContext()) {
                @Override
                public boolean canScrollVertically() {
                    return false;
                }
            };

Kode di atas menonaktifkan RecyclerView menggulir secara vertikal.

Emi Raz
sumber
6

Menulis versi kotlin:

class NoScrollLinearLayoutManager(context: Context?) : LinearLayoutManager(context) {
    private var scrollable = true

    fun enableScrolling() {
        scrollable = true
    }

    fun disableScrolling() {
        scrollable = false
    }

    override fun canScrollVertically() =
            super.canScrollVertically() && scrollable


    override fun canScrollHorizontally() =
            super.canScrollVertically()

 && scrollable
}

pemakaian:

recyclerView.layoutManager = NoScrollLinearLayoutManager(context)
(recyclerView.layoutManager as NoScrollLinearLayoutManager).disableScrolling()
Saya naga katak
sumber
5

Perluas LayoutManagerdan timpa canScrollHorizontally()dan canScrollVertically()untuk menonaktifkan pengguliran.

Ketahuilah bahwa memasukkan item di awal tidak akan secara otomatis menggulir kembali ke awal, untuk menyiasati ini lakukan sesuatu seperti:

  private void clampRecyclerViewScroll(final RecyclerView recyclerView)
  {
    recyclerView.getAdapter().registerAdapterDataObserver(new RecyclerView.AdapterDataObserver()
    {
      @Override
      public void onItemRangeInserted(int positionStart, int itemCount)
      {
        super.onItemRangeInserted(positionStart, itemCount);
        // maintain scroll position at top
        if (positionStart == 0)
        {
          RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager();
          if (layoutManager instanceof GridLayoutManager)
          {
            ((GridLayoutManager) layoutManager).scrollToPositionWithOffset(0, 0);
          }else if(layoutManager instanceof LinearLayoutManager)
          {
            ((LinearLayoutManager) layoutManager).scrollToPositionWithOffset(0, 0);
          }
        }
      }
    });
  }
Aidanvii
sumber
1
ini menonaktifkan juga smoothScrollToPosition
Mladen Rakonjac
5

Saya tahu ini sudah memiliki jawaban yang diterima, tetapi solusinya tidak memperhitungkan kasus penggunaan yang saya temui.

Saya secara khusus membutuhkan item tajuk yang masih dapat diklik, namun menonaktifkan mekanisme gulir RecyclerView. Ini dapat dilakukan dengan kode berikut:

recyclerView.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {
                            @Override
     public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
         return e.getAction() == MotionEvent.ACTION_MOVE;
     }

     @Override
     public void onTouchEvent(RecyclerView rv, MotionEvent e) {

     }

     @Override
     public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {

    }
});
Ryan Simon
sumber
Untuk beberapa alasan, Anda harus mengklik dengan benar, tanpa memindahkannya agar berfungsi.
Jared Burrows
Poin bagus, @JaredBurrows. Ini karena kami mengabaikan ACTION_MOVE. Agar sentuhan terasa alami, ada beberapa yang memberi antara sentuhan, dan sedikit gerakan di layar. Sayangnya, saya tidak dapat menyelesaikan masalah itu.
Ryan Simon
Terima kasih, persis apa yang saya butuhkan!
Siswa
5

Seperti yang setLayoutFrozensudah usang, Anda dapat menonaktifkan gulir dengan membekukan RecyclerView Anda dengan menggunakan suppressLayout.

Membekukan:

recyclerView.suppressLayout(true)

Untuk mencairkan:

recyclerView.suppressLayout(false)
Shylendra Madda
sumber
4

dalam XML: -

Anda dapat menambahkan

android:nestedScrollingEnabled="false"

dalam file XML tata letak RecyclerView anak

atau

di Jawa: -

childRecyclerView.setNestedScrollingEnabled(false);

ke RecyclerView Anda dalam kode Java.

Menggunakan ViewCompat (Jawa): -

childRecyclerView.setNestedScrollingEnabled(false);hanya akan berfungsi di android_version> 21 perangkat. untuk bekerja di semua perangkat gunakan yang berikut ini

ViewCompat.setNestedScrollingEnabled(childRecyclerView, false);

jafarbtech
sumber
Unggul, semua apis tertutup, harus didukung.
Ricard
3

Entah mengapa jawaban @Alejandro Gracia mulai bekerja hanya setelah beberapa detik. Saya menemukan solusi yang memblokir RecyclerView secara instan:

recyclerView.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {
            @Override
            public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
                return true;
            }
            @Override
            public void onTouchEvent(RecyclerView rv, MotionEvent e) {
            }
            @Override
            public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
            }
        });
vovahost
sumber
3

Timpa onTouchEvent () dan onInterceptTouchEvent () dan kembalikan false jika Anda tidak membutuhkan OnItemTouchListener sama sekali. Ini tidak menonaktifkan OnClickListeners dari ViewHolders.

public class ScrollDisabledRecyclerView extends RecyclerView {
    public ScrollDisabledRecyclerView(Context context) {
        super(context);
    }

    public ScrollDisabledRecyclerView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    public ScrollDisabledRecyclerView(Context context, @Nullable AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    public boolean onTouchEvent(MotionEvent e) {
        return false;
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent e) {
        return false;
    }
}
ya
sumber
3

Anda dapat menambahkan baris ini setelah mengatur adaptor Anda

ViewCompat.setNestedScrollingEnabled(recyclerView, false);

Sekarang recyclerview Anda akan berfungsi dengan scrolling yang lancar

Atefeh Srch
sumber
2

Saya telah berjuang dalam masalah ini selama beberapa jam, Jadi saya ingin berbagi pengalaman saya, Untuk solusi layoutManager itu baik-baik saja tetapi jika Anda ingin mengaktifkan gulir, pendaur ulang akan kembali ke atas.

Solusi terbaik sejauh ini (setidaknya untuk saya) adalah menggunakan metode @Zsolt Safrany tetapi menambahkan pengambil dan penyetel sehingga Anda tidak perlu menghapus atau menambahkan OnItemTouchListener.

Sebagai berikut

public class RecyclerViewDisabler implements RecyclerView.OnItemTouchListener {

    boolean isEnable = true;

    public RecyclerViewDisabler(boolean isEnable) {
        this.isEnable = isEnable;
    }

    public boolean isEnable() {
        return isEnable;
    }

    public void setEnable(boolean enable) {
        isEnable = enable;
    }

    @Override
    public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
        return !isEnable;
    }

    @Override
    public void onTouchEvent(RecyclerView rv, MotionEvent e) {}

   @Override
   public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept){}
 }

Pemakaian

RecyclerViewDisabler disabler = new RecyclerViewDisabler(true);
feedsRecycler.addOnItemTouchListener(disabler);

// TO ENABLE/DISABLE JUST USE THIS
disabler.setEnable(enable);
Aladdin
sumber
2

Di Kotlin, jika Anda tidak ingin membuat kelas tambahan hanya untuk menetapkan satu nilai, Anda bisa membuat kelas anonim dari LayoutManager:

recyclerView.layoutManager = object : LinearLayoutManager(context) {
    override fun canScrollVertically(): Boolean = false
}
Micer
sumber
1

Inilah cara saya melakukannya dengan pengikatan data:

            <android.support.v7.widget.RecyclerView
                android:id="@+id/recycler_view"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:clipChildren="false"
                android:onTouch="@{(v,e) -> true}"/>

Sebagai pengganti "true", saya menggunakan variabel boolean yang berubah berdasarkan kondisi sehingga tampilan pendaur ulang akan beralih antara dinonaktifkan dan diaktifkan.

bwhite
sumber
1

Datang dengan sebuah fragmen yang berisi beberapa RecycleView jadi saya hanya perlu satu scrollbar bukan satu scrollbar di setiap RecycleView.

Jadi saya hanya meletakkan ScrollView di wadah induk yang berisi 2 RecycleViews dan digunakan android:isScrollContainer="false"dalam RecycleView

<android.support.v7.widget.RecyclerView 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"
    app:layoutManager="LinearLayoutManager"
    android:isScrollContainer="false" />
pk028382
sumber
1

Menambahkan

android:descendantFocusability="blocksDescendants"

pada anak Anda dari SrollView atau NestedScrollView (dan orang tua dari ListView, recyclerview, dan gridview)

Pankaj Talaviya
sumber
1

Ada cara yang lebih mudah untuk menonaktifkan pengguliran (secara teknis ini lebih tepatnya mencegat peristiwa pengguliran dan mengakhirinya ketika suatu kondisi terpenuhi), hanya menggunakan fungsionalitas standar. RecyclerViewmemiliki metode yang dipanggil addOnScrollListener(OnScrollListener listener), dan hanya dengan ini Anda dapat menghentikannya dari menggulir, seperti:

recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
    @Override
    public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
        super.onScrollStateChanged(recyclerView, newState);
        if (viewModel.isItemSelected) {
            recyclerView.stopScroll();
        }
    }
});

Kasus penggunaan: Katakanlah Anda ingin menonaktifkan pengguliran ketika Anda mengklik salah satu item di dalamnya RecyclerViewsehingga Anda dapat melakukan beberapa tindakan dengannya, tanpa terganggu dengan menggulir secara tidak sengaja ke item lain, dan ketika Anda selesai melakukannya, cukup klik pada item lagi untuk mengaktifkan gulir. Untuk itu, Anda ingin melampirkan OnClickListenerke setiap item di dalamnya RecyclerView, jadi ketika Anda mengklik item, itu akan beralih isItemSelecteddari falseke true. Dengan cara ini ketika Anda mencoba untuk menggulir, RecyclerViewakan secara otomatis memanggil metode onScrollStateChangeddan sejak isItemSelecteddiatur ke true, itu akan segera berhenti, sebelum RecyclerViewmendapat kesempatan, yah ... untuk menggulir.

Catatan: untuk kegunaan yang lebih baik, coba gunakan GestureListeneralih-alih OnClickListeneruntuk mencegah accidentalklik.

Tim Jorjev
sumber
stopScroll()bukan untuk membekukan gulir, itu hanya untuk menghentikan / menghentikan gulir recyclerview.
Farid
@FARID, ya, metode ini hanya menghentikan semua gulir yang sedang berlangsung, dan dalam kasus khusus ini, ia melakukannya setiap kali ketika pengguna mencoba untuk menggulir konten RecyclerView dengan isItemSelectedset ke true. Kalau tidak, Anda akan memerlukan RecyclerView khusus untuk menonaktifkan scrolling untuk selamanya dan saya ingin menghindarinya karena saya hanya memerlukan sedikit fungsionalitas tambahan, yang disediakan oleh solusi ini.
Tim Jorjev
0

Tambahkan saja ini ke recycleview Anda di xml

 android:nestedScrollingEnabled="false"

seperti ini

<android.support.v7.widget.RecyclerView
                    android:background="#ffffff"
                    android:id="@+id/myrecycle"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:nestedScrollingEnabled="false">
anas
sumber
0

Untuk berhenti menggulir dengan sentuhan tetapi tetap menggulir melalui perintah:

if (appTopBarMessagesRV == null) {appTopBarMessagesRV = findViewById (R.id.mainBarScrollMessagesRV);

        appTopBarMessagesRV.addOnItemTouchListener(new RecyclerView.SimpleOnItemTouchListener() {
            @Override
            public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {

                if ( rv.getScrollState() == RecyclerView.SCROLL_STATE_DRAGGING)
                {
                     // Stop  scrolling by touch

                    return false;
                }
                return  true;
            }
        });
    }
Orang
sumber