最外层是像微信那样的效果,ViewPager里面放了几个Fragment。
Fragment里要使用RecyclerView,但是在RecyclerView上面还有其他的东西,所以我把它们放在LinearLayout里面,再把LinearLayout放在ScrollView里面。这样便实现了我要的效果。
ViewPager可以正常地水平滑动切换,RecyclerView也可以正常地垂直滑动。
问题是:
不管是滑动切换ViewPager还是直接点击下面的按钮切换(就像微信),当切换动画结束,并且RecyclerView部分可见时,如果这时RecyclerView上边缘低于屏幕的上边缘,ScrollView就会跳动一下,RecyclerView的上边缘就正好挨着屏幕上边缘了。
切换过程中RecyclerView不可见时不会发生跳动。
切换过程中RecyclerView上边缘高于屏幕上边缘时,不会发生跳动。
其他原因导致的RecyclerView可见,如Activity的跳转,不会发生跳动。
Fragment布局片段
...
<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="100dp"
android:text="Text"/>
<android.support.v7.widget.RecyclerView
android:id="@+id/rcv_draw_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bg_bottom_line"
/>
</LinearLayout>
</ScrollView>
...
这个View可以以一个RecylerView的HeaderView来实现,同ListView一样,可以解决问题。出现控件自己滑动对齐,我觉得应该是焦点变化导致的
ScrollView嵌套ListView或者RecycleView这种做法不好。两者的滑动事件可能会冲突,而且RecycleView也无法实现重用,耗资源。最好就是修改布局,如同楼上说的,可以添加HeaderView实现布局。
ok,scrollview嵌套listview要从写listview中的measure方法,且无法实现itemview的复用,耗费资源,item过多时就会oom,最好的方式就是添加headerview.
赞同一楼的回答,这边有一个库,scrollview,嵌套recyclerview本身有很多的bug,用为recyclerview添加head才是解决方案解决recyclerview添加头部问题,不过,如果recyclerview,当成一个必不可少的item时就蛋疼了,比如说,作为grid来使用,这时候可以下狠心,给scrollview,来一个scrollto(0,0),我的问题是在fragment用,show,hide切换的时候出现的