ScrollView里面的RecyclerView,有些item没有显示
Posted
技术标签:
【中文标题】ScrollView里面的RecyclerView,有些item没有显示【英文标题】:RecyclerView inside ScrollView, some items are not shown 【发布时间】:2016-10-30 16:57:28 【问题描述】:我在 ScrollView 中有一个这样的 RecyclerView:
<ScrollView
android:layout_
android:layout_>
<!--other stuff-->
<LinearLayout
android:layout_
android:layout_>
<android.support.v7.widget.RecyclerView
android:layout_
android:layout_
android:visibility="gone"/>
</LinearLayout>
<!--other stuff-->
</ScrollView>
而RecyclerView
的项目是RelativeLayout
,里面有EditText
等视图。 RelativeLayout
和 EditText
的 layout_height
都是 wrap_content
。用户可以输入EditText
,没有任何长度/行的限制,这样每个项目的高度都是不同的。
然后我发现Adapter
中的getItemCount()
返回真值,但onBindViewHolder()
被调用的时间错误(少于应有的时间),因此不足以显示所有项目。
我发现只有写recyclerView.setNestedScrollingEnabled(false)
才会发生这种情况。但我不能删除这条线。因为如果我这样做了,RecyclerView
将不会平滑滚动,并且与 ScrollView
和 ScrollView
本身内部的其他视图不协调。
这发生在 6.0 而不是 4.1。
我在此页面上与 Google 进行了交流:https://code.google.com/p/android/issues/detail?id=213914,他告诉我这是针对 RecyclerView
的错误修复。您可以访问该页面,以便更好地理解问题和我的目标(有一个小示例项目可以在那里显示问题)。我现在也不同意他的观点,我想解决这个问题。请帮忙,提前谢谢。
【问题讨论】:
尝试在滚动视图中设置android:fillViewport="true" @LucasPaolillo 好吧,它没有帮助。 用android:fillViewPort="true",将线性布局高度改为match_parent @LucasPaolillo 还是没用。 【参考方案1】:我自己找到了解决方案:将ScrollView
替换为NestedScrollView
并保留recyclerView.setNestedScrollingEnabled(false)
。我不知道这是否是 NestedScrollView
的用途,但它确实有效。
注意:
NestedScrollView
不是ScrollView
的孩子,而是FrameLayout
的孩子。
这个方案也会带来一些自模拟adjustResize
的bug。
【讨论】:
谢谢。像魅力一样工作。我用 NestedScrollView 替换了 ScrollView,现在一切正常。 也帮助了我,谢谢,setNestedScrollingEnabled(false);
对保持平滑滚动很重要
这实际上不是一个好的解决方案。这具有 RecyclerView 不再回收的效果。
出色的答案。谢谢:)【参考方案2】:
最好的解决方案是将multiple Views
保留在Single View / View Group
中,然后将那个视图保留在SrcollView 中。 即。
格式 -
<ScrollView>
<Another View>
<RecyclerView>
<TextView>
<And Other Views>
</Another View>
</ScrollView>
例如。
<ScrollView
android:layout_
android:layout_>
<TextView
android:text="any text"
android:layout_
android:layout_/>
<TextView
android:text="any text"
android:layout_
android:layout_/>
</ScrollView>
另一个例子。具有多个 View 的 ScrollView
<ScrollView
android:layout_
android:layout_
android:layout_weight="1">
<LinearLayout
android:layout_
android:layout_
android:orientation="vertical"
android:layout_weight="1">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/imageView"
android:layout_
android:layout_
android:background="#FFFFFF"
/>
<LinearLayout
android:layout_
android:layout_
android:paddingHorizontal="10dp"
android:orientation="vertical">
<TextView
android:layout_
android:layout_
android:text="@string/CategoryItem"
android:textSize="20sp"
android:textColor="#000000"
/>
<TextView
android:textColor="#000000"
android:text="₹1000"
android:textSize="18sp"
android:layout_
android:layout_/>
<TextView
android:textColor="#000000"
android:text="so\nugh\nos\nghs\nrgh\n
sghs\noug\nhro\nghreo\nhgor\ngheroh\ngr\neoh\n
og\nhrf\ndhog\n
so\nugh\nos\nghs\nrgh\nsghs\noug\nhro\n
ghreo\nhgor\ngheroh\ngr\neoh\nog\nhrf\ndhog"
android:layout_
android:layout_/>
</LinearLayout>
</LinearLayout>
</ScrollView>
【讨论】:
以上是关于ScrollView里面的RecyclerView,有些item没有显示的主要内容,如果未能解决你的问题,请参考以下文章
ScrollView(RecyclerView等)为什么会自动滚动原理分析,还有阻止自动滑动的解决方
ScrollView(RecyclerView等)为什么会自动滚动原理分析,还有阻止自动滑动的解决方案
android 中 scrollview 里面 又有一个子scrollview滑动事件冲突
ScrollView 内的 Recyclerview 滚动不顺畅