android - ViewPager嵌套ScrollView嵌套RecyclerView时ScrollView的Scroll位置异常跳动
PHPz
PHPz 2017-04-17 13:57:05
0
4
996

最外层是像微信那样的效果,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>
...
PHPz
PHPz

学习是最好的投资!

全部回覆(4)
阿神
<TextView
            android:layout_width="wrap_content"
            android:layout_height="100dp"
            android:text="Text"/>

這個View可以以一個RecylerView的HeaderView來實現,同ListView一樣,可以解決問題。出現控制自己滑動對齊,我覺得應該是焦點變化導致的

黄舟

ScrollView巢狀ListView或是RecycleView這種做法不好。兩者的滑動事件可能會衝突,而且RecycleView也無法實作重複使用,耗資源。最好就是修改佈局,如同樓上說的,可以加入HeaderView實作佈局。

Peter_Zhu

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切換的時候出現的

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板