我的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。这就像滚动正在跳过一些布局。
答案 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;
}