内容更改时,NestedScrollView 在顶部滚动
Posted
技术标签:
【中文标题】内容更改时,NestedScrollView 在顶部滚动【英文标题】:NestedScrollView scrolls on top when content changes 【发布时间】:2021-10-20 05:43:48 【问题描述】:我有一个fragment_layout.xml
,带有两个按钮(filter_1_btn
、filter_2_btn
),它们对RecyclerView
的项目执行过滤。问题是当我滚动一点(因为按钮上方的TextView
包含多行文本)然后应用过滤时,NestedScrollView
在屏幕顶部滚动。有没有办法在过滤后保持相同的滚动高度?
片段布局
<?xml version="1.0" encoding="utf-8"?>
<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/nested_scrollView"
android:layout_
android:layout_
android:fillViewport="true">
<LinearLayout
android:layout_
android:layout_
android:descendantFocusability="blocksDescendants"
android:focusable="true"
android:focusableInTouchMode="true"
android:orientation="vertical">
<TextView
android:id="@+id/description_tv"
android:layout_
android:layout_
android:layout_marginTop="36dp"
android:text="Very long random text..." />
<Button
android:id="@+id/filter_1_btn"
android:layout_
android:layout_
android:text="Filter 1"/>
<Button
android:id="@+id/filter_2_btn"
android:layout_
android:layout_
android:text="Filter 2"/>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/list"
android:layout_
android:layout_
android:layout_marginTop="24dp" />
</LinearLayout>
</androidx.core.widget.NestedScrollView>
【问题讨论】:
能贴一下过滤的代码吗,过滤后的数据怎么设置? 【参考方案1】:这是因为 recyclerView 的容器设置为 wrap_content ,所以当高度小于 NestedScrollView 时,它会滚动到顶部。
您可以通过提供大于 NestedScrollView 的高度来修复它:
所以添加 minHeight :
<?xml version="1.0" encoding="utf-8"?>
<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/nested_scrollView"
android:layout_
android:layout_
android:fillViewport="true">
<LinearLayout
android:layout_
android:layout_
android:descendantFocusability="blocksDescendants"
android:focusable="true"
android:focusableInTouchMode="true"
android:orientation="vertical">
<TextView
android:id="@+id/description_tv"
android:layout_
android:layout_
android:layout_marginTop="36dp"
android:text="Very long random text..." />
<Button
android:id="@+id/filter_1_btn"
android:layout_
android:layout_
android:text="Filter 1" />
<Button
android:id="@+id/filter_2_btn"
android:layout_
android:layout_
android:text="Filter 2" />
<FrameLayout
android:layout_
android:layout_
android:minHeight="1000dp">
<!-- Add min height to support scrolling-->
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/list"
android:layout_
android:layout_
android:layout_marginTop="24dp" />
</FrameLayout>
</LinearLayout>
</androidx.core.widget.NestedScrollView>
【讨论】:
以上是关于内容更改时,NestedScrollView 在顶部滚动的主要内容,如果未能解决你的问题,请参考以下文章
如何禁用 NestedScrollView&CollapsingToolbarLayout 的滚动,例如当下面没有更多内容时?
Android 使用 NestedScrollView 时我不能在底部放任何东西
当在nestedscrollview的recyclerview中将项目拖出可见空间时-nestedscrollView不滚动