Laggy RecyclerView

时间:2017-08-24 04:27:29

标签: android android-recyclerview nestedscrollview

我的recyclerview滚动是滞后的。当我通过触摸Recyclerview开始滚动时它会滞后,但是从上面的视图开始时不会延迟。 我还在recyclerview上禁用了nestedscrolling。

这是我的布局:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <android.support.v4.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scrollbars="vertical"
        android:overScrollMode="never">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:focusable="true"
            android:focusableInTouchMode="true">

            <TextView
                android:layout_width="match_parent"
                android:layout_height="200dp"
                android:text="HAHHAHA"/>

            <android.support.v7.widget.RecyclerView
                android:id="@+id/mRecyclerViewMain"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:layout_behavior="@string/appbar_scrolling_view_behavior"
                android:background="@android:color/transparent">

            </android.support.v7.widget.RecyclerView>


        </LinearLayout>

    </android.support.v4.widget.NestedScrollView>


</FrameLayout>

这是滞后的video。这就像滚动正在跳过一些布局。

1 个答案:

答案 0 :(得分:2)

像这样修改你的xml:

 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:tools="http://schemas.android.com/tools"
            android:layout_height="match_parent"
            android:layout_width="match_parent"
            xmlns:app="http://schemas.android.com/apk/res-auto">


                    <android.support.v7.widget.RecyclerView
                        android:id="@+id/mRecyclerViewMain"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        app:layout_behavior="@string/appbar_scrolling_view_behavior"
                        android:background="@android:color/transparent">

                    </android.support.v7.widget.RecyclerView>

        </FrameLayout>

并在recyclerView的标题中设置textView,它将解决您的问题

<TextView
                android:layout_width="match_parent"
                android:layout_height="200dp"
                android:text="HAHHAHA"/>

在适配器类中为标题和项目列表设置viewType

@Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        if (layoutInflater == null)
            layoutInflater = LayoutInflater.from(parent.getContext());

        if (viewType == 0) {
            // bind your headerview
        }
        if (viewType == 1) {
            //bind your recyclerview
        } 
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        if (holder instanceof HeaderHolder)
            // viewHolder for header view
        if (holder instanceof ListHolder) {
            // viewholder for list
        } 
    }

使用此方法可以传递viewType

@Override
    public int getItemViewType(int position) {

        if (position == 0)
            return 0;
        else if (ArrayList.size() == 0)
            return 1;

    }