2016-03-14 6 views
3

Я хочу implment экран, где у меня есть макет сверху и снизу, что у меня есть мнение, ресайклер так:Давать свиток виду с точки зрения ресайклера внутри него

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:fab="http://schemas.android.com/apk/res-auto" 
    tools:context="com.app.InstHomeDir.Fragments.PendingDocument" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@drawable/main_bg" 
    > 

    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_marginLeft="15dp" 
     android:layout_marginRight="15dp" 
     android:layout_marginBottom="15dp" 
     > 

    <android.support.v7.widget.CardView 

     android:background="@color/white" 
     app:cardElevation="2dp" 
     app:cardCornerRadius="2dp" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     > 
     <LinearLayout 
      android:orientation="vertical" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content"> 
      <com.app.InstHomeDir.Util.Roboto_Edit_Text_Bold 
      android:textColor="@color/bl2d2d2d" 
      android:padding="5dp" 
      android:text="DOCUMENT LIST" 
       android:textSize="20sp" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" /> 
      <com.app.InstHomeDir.Util.Roboto_EditText 
      android:padding="5dp" 
      android:textColor="#6f6f6f" 
      android:layout_marginTop="5dp" 
      android:layout_width="wrap_content" 
       android:textSize="12sp" 
      android:text="@string/Pending_Doc" 
      android:layout_height="wrap_content"/> 
     </LinearLayout> 


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


    <android.support.v7.widget.RecyclerView 
     android:id="@+id/recycler_penddoc" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:layout_anchor="@id/toolbar_layout" 
     app:layout_anchorGravity="bottom|center" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior" 
     > 

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


    </LinearLayout> 



</RelativeLayout> 

Теперь я хочу, чтобы дать прокрутите представление ко всему виду, но когда я делаю это, прокрутка экрана не является гладкой, так как на экране есть два свитка, как я могу решить эту проблему? Может кто-нибудь мне помочь?

ответ

5

Добавление заголовка и нижнего колонтитула это способ, но я нашел более легкий взгляд на это. Поместите весь вид внутри прокрутки. Теперь это будет делать прокрутку немного медленно, и он не будет выглядеть красиво, так, чтобы преодолеть это использовать этот код:

layoutManager = new LinearLayoutManager(getActivity()){ 
     @Override 
     public boolean canScrollVertically() { 
      return false; 
     } 
    }; 

теперь проблема в том, что есть 2 свитка в том же виде, когда я добавить весь взгляд изнутри вид прокрутки. поэтому мы сталкиваемся с этой проблемой. теперь, если мы удалим свойство прокрутки одного из них, то он будет работать плавно снова. Таким образом, мы удаляем свойство прокрутки вида recycler, так как оно является дочерним.

Работает как очарование.

+0

для меня, в этом случае первый элемент просмотра ресайклера начинает фокусироваться, как только мой фрагмент раздувается. содержимое выше просмотра ресайклера видно только при прокрутке вверх – prateek31

0

Обычно не рекомендуется использовать несколько атрибутов onScrolls.

Что вы должны сделать, это добавить заголовок для вашего переработчика с макетом, который вы хотите показать сверху. Чтобы сделать это, вы должны добавить в адаптере следующий код (не существует метод, как в ListView listView.addHeader())

@Override 
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    if (viewType == TYPE_ITEM) { 
     //inflate your layout and pass it to view holder 
     return new VHItem(null); 
    } else if (viewType == TYPE_HEADER) { 
     //inflate your layout and pass it to view holder 
     return new VHHeader(null); 
    } 

    throw new RuntimeException("there is no type that matches the type " + viewType + " + make sure your using types correctly"); 
} 

@Override 
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 
    if (holder instanceof VHItem) { 
     String dataItem = getItem(position); 
     //cast holder to VHItem and set data 
    } else if (holder instanceof VHHeader) { 
     //cast holder to VHHeader and set data for header. 
    } 
} 

@Override 
public int getItemViewType(int position) { 
    if (isPositionHeader(position)) 
     return TYPE_HEADER; 

    return TYPE_ITEM; 
} 

private boolean isPositionHeader(int position) { 
    return position == 0; 
} 

private String getItem(int position) { 
    return data[position - 1]; 
} 

class VHItem extends RecyclerView.ViewHolder { 

    public VHItem(View itemView) { 
     super(itemView); 
    } 
} 

class VHHeader extends RecyclerView.ViewHolder { 

    public VHHeader(View itemView) { 
     super(itemView); 
    } 
} 

Там также библиотеки like this

+0

Вы пробовали? – Spirrow

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