Recyclerview внутри ScrollView не прокручивается плавно



для моего приложения я использую RecyclerView внутри ScrollView здесь RecyclerView имеет высоту, основанную на его содержании с помощью библиотека. Прокрутка работает, но это не работает гладко, когда я прокручиваю RecyclerView. Когда я прокручиваю ScrollView сам он прокручивается плавно.



код, который я использую для определения RecyclerView:



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


The 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" />
568   6  

6 ответов:

попробуйте:

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 >

однако это более длинный путь, и если вы в порядке с пользовательским линейным менеджером компоновки, то просто отключите вложенную прокрутку в представлении recycler.

Edit (4/3/2016)

The v 23.2 выпуск поддержки библиотеки теперь включает в себя заводскую функцию "обернуть содержимое" во всех default LayoutManagerы. Я не протестировать его, но вы должны, вероятно, отдают предпочтение именно этой библиотеки вы используете.

<ScrollView >
   <LinearLayout >

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

   </LinearLayout >
</ScrollView >

мне нужно было только использовать это:

mMyRecyclerView.setNestedScrollingEnabled(false);

в своем onCreateView() метод.

Спасибо большое!

Вы можете использовать этот способ :

добавьте эту строку в xml recyclerView:

android:nestedScrollingEnabled="false"

или в коде java:

RecyclerView.setNestedScrollingEnabled(false);

надеюсь, что это помогло .

вы можете попробовать оба способа с XML и программно. Но проблема, с которой вы можете столкнуться (ниже API 21), делая это с помощью XML, не будет работать . Поэтому лучше установить его программно в вашем действии / фрагменте.

XML-код:

<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);

У меня были похожие проблемы (я пытался создать вложенные RecyclerViews что-то вроде дизайна Google PlayStore). Лучший способ справиться с этим-подкласс дочерних RecyclerViews и переопределение методов "onInterceptTouchEvent" и "onTouchEvent". Таким образом, вы получаете полный контроль над тем, как эти события ведут себя и в конечном итоге прокрутки.

Если вы используете виджеты VideoView или heavy weight в своих childviews, сохраните RecyclerView с помощью height wrap_content внутри NestedScrollView с высотой match_parent Затем прокрутка работает гладко, как идеально, как вы хотите.

FYI,

    <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>

спасибо микро это было от вашего намека

karthik

Comments

    Ничего не найдено.