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:
- Desactivar eventos táctiles de RecyclerView (para evitar toques de usuario)?
- ¿Cuál es el equivalente listview.setSelection en caso de Recycler View
- Conjunto de datos de cambio RecyclerView
- ¿Cómo puede RecyclerView ItemTouchHelper bloqueo deslizar artículo?
- ¿Por qué no overScrollBy () y onOverScrolled () funcionan con RecyclerView
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.
- Cómo obtener la altura del elemento recyclerview en "onBindViewHolder"
- RecyclerView y java.lang.IndexOutOfBoundsException: Inconsistencia detectada. Posicionador de visor no válido PositionViewHolder en dispositivos Samsung
- Elemento de centrado de Android en RecyclerView
- Centrar verticalmente el elemento seleccionado en RecyclerView
- Eliminar elementos basados en el cursor en RecyclerView
- Recyclerview no llama aCreateViewHolder
- ¿Cómo tener un ListView / RecyclerView dentro de un RecyclerView padre?
- Admob Native Ads dentro de un Recylerview muestra espacio en blanco antes de cargar
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.