Recyclerview dentro de la vista de desplazamiento anidada cargando todos los datos en lugar de llamar una por una imagen cuando se desplaza

En mi aplicación, estoy usando tabHost Activiy.In tabhost primera pestaña, estoy usando TabActivity, estoy cargando más de 500 imágenes.

Uso de la vista de desplazamiento anidado:

He utilizado la vista de desplazamiento anidada dentro de recyclerview.When cargando la página de inicio, que está cargando las 500 imágenes en un principio, a continuación, mostrar la página de inicio.Así que causa la memoria de error.

Sin utilizar la vista de desplazamiento anidado:

Si elimino la vista de desplazamiento anidada, todo está funcionando good.it carga la imagen uno por uno cuando scrolling.it no causa errores de memoria.

Mi requisito:

Necesito desplazar la disposición relativa colocada encima del recyclerview.So que utilicé la visión anudada del desfile. Pero no trabajó para mí.

Tab_home_layout:

<?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.NestedScrollView 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" app:layout_behavior="@string/appbar_scrolling_view_behavior" > <LinearLayout android:id="@+id/tab_home_activity" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <RelativeLayout android:id="@+id/home_layout_top_2_recycler" android:layout_width="match_parent" android:layout_height="60dp" android:background="@drawable/layout_border" > <ImageView android:id="@+id/img_user_home_tab_recycler" android:layout_width="40dp" android:layout_height="40dp" android:paddingLeft="5dp" android:paddingRight="5dp" android:layout_centerVertical="true" android:contentDescription="@string/cont_desc" android:src="@drawable/profile_pic_blue" /> <TextView android:id="@+id/tv_user_mind_home_tab_recycler" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_marginLeft="5dp" android:layout_toRightOf="@+id/img_user_home_tab_recycler" android:hint="@string/whats_on" android:textColor="@color/Black" android:textSize="@dimen/txt_size" /> </RelativeLayout> <android.support.v7.widget.RecyclerView android:id="@+id/rv_list_tab_home_recycler" android:layout_width="match_parent" android:layout_height="wrap_content" android:scrollbars="none" android:visibility="visible" /> </LinearLayout> </android.support.v4.widget.NestedScrollView> 

A continuación estoy dispuesto a compartir lo que he probado hasta ahora.

  • Intenté esto SO Post. Pero estoy usando la página de inicio dentro de tabActivity.So no puedo utilizar la barra de herramientas + el diseño del coordinador. Tan esta solución no trabajó para mí.

  • Entonces intenté utilizar la disposición múltiple para el recyclerview. Pero eso no trabajó para mí. Porque ese relativelayout es uno estático. Si estoy consiguiendo cualquier condición de medios del webservice, puedo utilizar el recyclerview de la disposición múltiple. Pero necesito apenas Desplácese las vistas.

  • Planeé fijar el relativelayout estático en la 0ma posición del adaptador. Pero mis imágenes de los servicios de web estaban cargando de la posición 0o. Tan no puedo fijar el relativelayout estático en adaptador en la posición 0a.

¿Hay alguna solución alternativa para resolver este problema.Gracias.

Lo importante es en onBindViewHolder debe cargar la imagen de su webservice desde la posición-1 .
Este es un ejemplo de aquí y en su caso el Header es su static RelativeLayout

 public class HeaderAdapter extends RecyclerView.Adapter < RecyclerView.ViewHolder > { private static final int TYPE_HEADER = 0; private static final int TYPE_ITEM = 1; String[] data; public HeaderAdapter(String[] data) { this.data = data; } @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); } } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { if (holder instanceof VHItem) { String dataItem = getItem(position); //cast holder to VHItem and set data // *********** // LOAD YOUR WEBSERVICE IMAGE FROM **position - 1** // => for row 1 you will get the image 0 ... // *********** } else if (holder instanceof VHHeader) { //cast holder to VHHeader and set data for header. } } //increasing getItemcount to 1. This will be the row of header. @Override public int getItemCount() { return data.length + 1; } @Override public int getItemViewType(int position) { if (isPositionHeader(position)) return TYPE_HEADER; return TYPE_ITEM; } // condition for header private boolean isPositionHeader(int position) { return position == 0; } // getItem -1 because we have add 1 header private String getItem(int position) { return data[position - 1]; } class VHItem extends RecyclerView.ViewHolder { TextView title; public VHItem(View itemView) { super(itemView); } } class VHHeader extends RecyclerView.ViewHolder { Button button; public VHHeader(View itemView) { super(itemView); } } } 

Usted puede utilizar CoordinatorLayout casi dondequiera que usted tiene gusto similar a otras disposiciones como LinearLayout o incluso RelativeLayout . Si desea que su RelativeLayout desplace en respuesta a su RecyclerView , simplemente colóquelos dentro de un CoordinatorLayout con AppBarLayout . Aquí está su diseño modificado:

 <android.support.design.widget.CoordinatorLayout android:id="@+id/main_content" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.design.widget.AppBarLayout android:id="@+id/appbar" android:layout_width="match_parent" android:layout_height="wrap_content"> <RelativeLayout android:id="@+id/home_layout_top_2_recycler" android:layout_width="match_parent" android:layout_height="60dp" android:background="@drawable/layout_border" app:layout_scrollFlags="scroll"> <ImageView android:id="@+id/img_user_home_tab_recycler" android:layout_width="40dp" android:layout_height="40dp" android:paddingLeft="5dp" android:paddingRight="5dp" android:layout_centerVertical="true" android:contentDescription="@string/cont_desc" android:src="@drawable/profile_pic_blue" /> <TextView android:id="@+id/tv_user_mind_home_tab_recycler" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_marginLeft="5dp" android:layout_toRightOf="@+id/img_user_home_tab_recycler" android:hint="@string/whats_on" android:textColor="@color/Black" android:textSize="@dimen/txt_size" /> </RelativeLayout> </android.support.design.widget.AppBarLayout> <android.support.v7.widget.RecyclerView android:id="@+id/rv_list_tab_home_recycler" android:layout_width="match_parent" android:layout_height="wrap_content" android:scrollbars="none" android:visibility="visible" app:layout_behavior="@string/appbar_scrolling_view_behavior"/> </android.support.design.widget.CoordinatorLayout> 

Cambie a su preferencia, pero asegúrese de establecer el layout_height de RelativeLayout en algo que no sea wrap_content .

Si este CoordinatorLayout está dentro de otro CoordinatorLayout , use el NestedCoordinatorLayout de esta respuesta como su CoordinatorLayout dentro.

  • RecyclerView? Android: attr / selectableItemBackground no funciona en los elementos
  • Cómo agregar consistentemente fondos alternativos a las vistas de elementos en RecyclerView
  • ¿Cómo puedo crear un RecyclerView circular (sin fin)?
  • RecyclerView & SnapHelper -> obtener una vista rápida / segmentada
  • Hacer que ItemDecoration se mueva con Animation
  • Deslizar para descartar para RecyclerView
  • RecyclerView add EmptyView
  • Resaltar el elemento seleccionado dentro de un RecyclerView
  • RecyclerView gravedad
  • Android - ¿Cómo cambiar la altura de Recyclerview dinámicamente?
  • Control de la velocidad de lanzamiento para la vista del reciclador
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.