8

miałem RecyclerView w Scrollview takiego:RecyclerView wewnątrz Scrollview, niektóre elementy nie są pokazane

<ScrollView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <!--other stuff--> 

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

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

    </LinearLayout> 

    <!--other stuff--> 

</ScrollView> 

i rzecz RecyclerView „s jest RelativeLayout, wewnątrz którego znajduje się EditText oraz inne poglądy. Model layout_height tego RelativeLayout i EditText jest zarówno wrap_content. Użytkownik może wprowadzić do tego EditText bez limitu długości/linii, aby wysokość każdego elementu była inna.

Potem okazało się, że getItemCount() w Adapter powraca prawdziwa wartość, ale onBindViewHolder() nazywa błędnych razy (mniej niż powinno być), więc nie wystarczy, aby pokazać wszystkie elementy.

Znalazłem, że tak się stanie, jeśli napiszę: recyclerView.setNestedScrollingEnabled(false). Ale nie mogę usunąć tej linii. Gdybym to zrobił, RecyclerView nie będzie płynnie przewijał i nie jest zgodny z innymi widokami wewnątrz samych ScrollView i ScrollView.

To zdarzenie występuje w wersji 6.0, ale nie w wersji 4.1.

Połączyłem się z Google na tej stronie: https://code.google.com/p/android/issues/detail?id=213914 i powiedział mi, że jest to poprawka dla RecyclerView. Możesz odwiedzić tę stronę, abyś mógł lepiej zrozumieć pytanie i mój cel (jest tam mały przykładowy projekt, aby pokazać tam problem). Nie zgadzam się z nim nawet teraz i chcę rozwiązać problem. Proszę, pomóżcie z góry.

+0

spróbuj ustawić android: fillViewport = "true" w scrollview –

+0

@LucasPaolillo Cóż, to nie pomaga. – ywwynm

+0

z Androidem: fillViewPort = "true", zmień wysokość układu liniowego na match_parent –

Odpowiedz

42

Sam znalazłem rozwiązanie: zamień ScrollView na NestedScrollView i zachowaj recyclerView.setNestedScrollingEnabled(false). Nie wiem, czy to jest to, do czego służy NestedScrollView, ale działa.

UWAGA:

  1. NestedScrollView nie jest dzieckiem ScrollView ale FrameLayout.
  2. To rozwiązanie przyniesie również pewne błędy z samodymulowanym adjustResize.
+0

dzięki. pracował jak urok. Wymieniłem ScrollView z NestedScrollView i wszystko jest już w porządku. –

+2

pomógł mi również, dzięki, '' 'setNestedScrollingEnabled (false);' '' jest ważne, aby utrzymać płynne przewijanie – user2582318

+0

Jesteś BOGIEM !!! : D Dziękujemy –