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" />
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выпуск поддержки библиотеки теперь включает в себя заводскую функцию "обернуть содержимое" во всех defaultLayoutManagerы. Я не протестировать его, но вы должны, вероятно, отдают предпочтение именно этой библиотеки вы используете.<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