2016-10-02 4 views
0

Recyclerview не прокручивается плавно с scrollview. Если я удалю scrollview, чем его гладкое. Что я должен сделать для плавного прокрутки recyclerview?RecyclerView не прокручивается smotly

<?xml version="1.0" encoding="utf-8"?> 
    <ScrollView 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:app="http://schemas.android.com/apk/res-auto" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <RelativeLayout 
      android:id="@+id/content_activity_main" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      > 

      <android.support.v7.widget.RecyclerView 
       android:id="@+id/rv" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_alignParentTop="true" 
       /> 

      <LinearLayout 
       android:id="@+id/ll" 
       android:layout_width="match_parent" 
       android:layout_height="90dp" 
       android:layout_below="@+id/rv" 
       android:orientation="vertical"> 

       <ImageView 
        android:layout_width="50dp" 
        android:layout_height="50dp" 
        android:scaleType="fitXY" 
        /> 

       <TextView 
        android:id="@+id/textView35" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:layout_marginTop="8dp" 
        /> 

      </LinearLayout> 
     </RelativeLayout> 
    </ScrollView> 

ответ

1

Вы не должны помещать свой RecyclerView внутри ScrollView. Если вам нужно показать нижний колонтитул в конце вашего RecyclerView (т. Е. Представление после последнего элемента вашего RecyclerView), то это также должно быть частью RecyclerView. Для этого вам просто нужно указать другой тип элемента в вашем адаптере и вернуть соответствующий ViewHolder.

Сначала добавьте это в адаптере:

private class ViewType { 
     public static final int NORMAL = 0; 
     public static final int FOOTER = 1; 
} 

Затем переопределить GetCount() вашего адаптера и добавить еще один пункт:

@Override 
public int getCount() { 
    return yourListsSize + 1; 
} 

Далее вам нужно указать, какой тип это текущий элемент. Для достижения этой цели, переопределить getItemViewType() вашего адаптера:

@Override 
public int getItemViewType(int position) { 
    if(position == getCount() - 1) 
     return ViewType.FOOTER; 
    else 
     return ViewType.NORMAL; 
} 

Наконец, в onCreateViewHolder() проверяет тип текущего элемента и раздувать соответствующий вид:

@Override 
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) { 

    View rowView; 

    switch (viewType) { 
     case ViewType.NORMAL: 
      rowView=LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.normal, viewGroup, false); 
      break; 
     case ViewType.FOOTER: 
      rowView=LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.footer, viewGroup, false); 
      break; 
     default: 
      rowView=LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.normal, viewGroup, false); 
      break; 
    } 
    return new ViewHolder(rowView); 
} 

Конечно, вам также потребуется переместить макет нижнего колонтитула в отдельный XML-файл, чтобы раздуть его здесь. Под «макетом нижнего колонтитула» я имею в виду ваш LinearLayout с android:id="@+id/ll" и его дочерние представления.

Надеюсь, это поможет.

Смежные вопросы