İç İçe Kaydırma Görünümü içinde geri dönüşüm görünümü kaydırması, ancak normal Geri Dönüştürücü görünümü veya İç içe Kaydırma görünümü gibi hızlı kaydırma yapmaz


96

RecyclerViewİçeride kullanıyorum NestedScrollViewve işe yarıyor. Ama RecyclerViewiçeride LinearLayoutveya başka bir şey kullandığımda , harekete bağlı olarak çeşitli hızlarda kayıyor. Parşömen hareketi dinliyor ve sadece biraz yukarı kaydırırsam, biraz kayarken gerçekten hızlı yukarı kayarsam, o zaman gerçekten hızlı kayıyor. Şimdi benim sorunum, RecyclerViewiçeride NestedScrollViewkesinlikle kaydırın, ancak hızlı kaydırmanın çalışmaması. Ancak hızlı ya da yavaş kayıyorum ya RecyclerViewda NestedScrollViewsadece biraz kaydırıyorum.

Bu kaydırma görünümümün NestedScrollViewveya RecyclerViewo kaydırma görünümünün çeşitli hızlarda kaydırılmasını nasıl sağlayabilirim ?


3
recyclerView.setNestedScrollingEnabled (false); Bu gerçekten işe yarıyor !!
Aung Si Min Htet


Yanıtlar:


266

Deneyin

recyclerView.setNestedScrollingEnabled(false);

14
Ancak bu ayarla, recyclerview görünümleri geri dönüştürmez! bu konudaki fikrin nedir?
MAYIS3AM

Aslında, düzenimin içine afiş ve diğer görünümleri de içeren farklı düzen yöneticileriyle (Doğrusal Düzen ve Izgara Düzeni gibi) iki veya daha fazla geri dönüşümlü görünüm ekliyorum. Bu nedenle, geri dönüştürücünün görünümünü bu şekilde ele almak için, bunların hepsini İç İçe Kaydırma Görünümü düzeltmesine yerleştirmek benim için.
Aung Si Min Htet

24
Bu cevabın nasıl bu kadar çok olumlu oy aldığını bilmiyorum. İç içe kaydırmayı devre dışı bırakırsanız, amacını geçersiz kılar. Ya yuvalanmış parşömenler ve geri dönüştürücüyü kullanmak istersem? CoordinatorLayout, AppBarLayout ve RecyclerView gibi bir şey?
Jimit Patel

Teşekkürler @JimitPatel, şu anda bu benim sorunum. İç içe geçmiş bir kaydırma görünümünde bir geri dönüşüm görünümüm var ve kaydıramıyorum. stackoverflow.com/questions/41259756/…
Karoly

1
@Karoly'nin iç içe geçmiş parşömenleri özelleştirmesi gerekiyor ... Ben öyle ... Bunu birkaç saat içinde göndereceğim ... Şu anda seyahat ediyorum. Araç çubuğundan sonra geri dönüşümlü görünümde paralaks etkisinde bu sorunla karşılaştım.
Jimit Patel

53

Varsayılan olarak setNestedScrollingEnabledyalnızca API-21'den sonra çalışır.

ViewCompat.setNestedScrollingEnabled(recyclerView, false);API-21 (Lollipop) öncesi ve sonrası için iç içe kaydırmayı devre dışı bırakmak için kullanabilirsiniz . Belgelere bağlantı .

Umarım bu yardımcı olur!


21

SetNestedSCrollEnabled yöntemini kullanmanın mümkün olmadığı android 16 üzerinde çalışıyordum.

RecyclerView'ın Scroll'ları işlemesini durdurmak için ne yapıyorum.

LinerLayoutManager'da olduğu gibi canScrollHorizontally yaptım, canScrollVertically varsayılan olarak false döndürdü.

myRecyclerView.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false){
            @Override
            public boolean canScrollHorizontally() {
                return false;
            }

            @Override
            public boolean canScrollVertically() {
                return false;
            }
        });

Bu aslında benim için çalıştı. ScrollView içinde bir LinearLinear içinde RecyclerView vardı.
FonzTech

9

Birkaç yinelemeden sonra bir çözüm buldum.

  1. RecyclerView kullanıyorsanız, o zaman:

    recyclerView.setNestedScrollingEnabled(false);
    
  2. NestedScrollingView içinde LinearLayout kullanıyorsanız, normal bir ScrollView içindeki LinearLayout'u alın ve ardından kaydırma işlemini şu şekilde ayarlayın:

    scrollView.setNestedScrollingEnabled(false);
    

2

android: overScrollMode = "asla

  <android.support.v4.widget.NestedScrollView
    android:id="@+id/nestedScrollView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:overScrollMode="never">


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <android.support.v7.widget.RecyclerView
            android:id="@+id/recyclerView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

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

1

ScrollView ile onMeasure yöntemini geçersiz kılan ExtendRecyclerView sınıfını kullanabilirsiniz. Bu benim için çalışıyor!

@Override
protected void onMeasure(int widthSpec, int heightSpec) {
    int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
    super.onMeasure(widthSpec, expandSpec);
}

1
recyclerView.setNestedScrollingEnabled(false);

Bazen faydalı olacaktır, ancak her zaman tavsiye edilmez çünkü geri dönüşüm görünümünde geri dönüşüm özelliğini devre dışı bırakır.

Alternatifler:

CollapsiveToolbarLayout ile Recycler görünümünü deneyin. diğer görünümleri collapsiveTollbar düzenine yerleştirin.


0

Ben de bu problemle karşılaştım. Ve 26.1.0düzeltmek için yükseltin .


-1

Benim durumumda tüm resimleri çekilebilir klasöre çekilebilir-xxxhdpi klasörüne yerleştirdim, bu yüzden ekran kullanıcı arayüzüm gecikiyor.


-3

Geri dönüşümcü görünümünü LinearLayout gibi herhangi bir düzende sarmalamanız ve RecyclerView boyutunu 800dp gibi sabit olarak ayarlamanız gerekir. Bu, düzgün kaydırma sağlar ve geri dönüşümcü görünümü, kaydırma sırasında yine de geri dönüştürücü görünümleri sağlar.

<android.support.v4.widget.NestedScrollView 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"
                                android:orientation="vertical">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <android.support.v7.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="800dp"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
</LinearLayout>


1
Bu iyi bir cevaptır, çünkü RecyclerView'ın ana faydasını bozmadan, sadece görünen görünümleri yüklemeden ve gözden kaybolduğunda geri dönüştürmeden fling scroll sorununu çözmenin yolunu işaret ediyor. 800dp gibi sabit bir değer tüm ekran boyutlarında ve yönelimlerinde çalışmayacağı için insanlar bunu düşürmüş olabilir, ancak layout_height değeri hesaplanabilir ve programlı olarak ayarlanabilir - biraz dağınık, ancak her iki sorunu da çözer.
jk7

-3

Bu WAI. NestedScrollView, alt öğelerini "Belirtilmemiş" Özelliğine göre ölçer. Çocuk da istediği kadar büyüyebilir.

Bu, esasen NSV ve RV'nin yüksekliğine eşittir. RV söz konusu olduğunda, tamamen görüntülendiğine inanır.

RV'nizi bir LL ile sarın ve RV'nize bir yükseklik verin. LL, ölçüm spesifikasyonunu BELİRTİLMEMİŞ olarak ayarlamaz, böylece RV sağladığınız DP'ler ne olursa olsun ayarlanan yüksekliği içinde doğru şekilde kaydırılır.

Bu yöntemin tek dezavantajı, RV'nizde ebeveyn eşleştirme yapamayacak olmanızdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.