¿Cómo puedo hacer que RecyclerView actualice su diseño?
Tengo un RecyclerView
con un montón de vistas personalizadas que pueden cambiar de altura después de un tiempo, ya que contienen ImageView
s que cargan su imagen de forma asíncrona. El RecyclerView
no recoge este cambio de diseño, aunque llamo forceLayout
en ImageView
y el RecyclerView
se inicializa con setHasFixedSize(false)
. Todos los padres contenedores de ImageView
han establecido android:layout_height="wrap_content"
.
¿Cómo puedo hacer que el RecyclerView
actualice su diseño? Con good'ol ListView
esto no fue un problema.
- Cómo deshabilitar el desplazamiento de RecyclerView excepto programáticamente
- Android selectableItemBackground ningún efecto de resplandor en la prensa larga
- Horizontal RecyclerView wrap_content no funciona bien en samsungs?
- ¿Necesito dependencia de Gradle para RecyclerView?
- StaggeredGridLayoutManager cambiar spanCount dinámicamente RecylerView
- La barra de desplazamiento de RecyclerView salta de nuevo al principio después del primer elemento
- Centrar verticalmente el elemento seleccionado en RecyclerView
- Cómo cambiar el diseño del elemento recyclerview desde fuera?
- Cómo abrir una actividad diferente en recicladorVer artículo onclick
- Crear menú de opciones para RecyclerView-Item
- Recyclerview lag en desplazamiento debido a los anuncios de Admob
- Android reciclerview notifyItemInserted animación
- Android - ¿Cómo agregar una línea de separación discontinua / punteada para RecyclerView?
Puede utilizar notifyDataSetChanged
en el Adapter
para RecyclerView
si todas sus imágenes cambian al mismo tiempo o notifyItemChanged(int position)
si sólo ha cambiado uno de los elementos. Esto le indicará al RecyclerView
que vuelva a vincular la View
particular.
Google finalmente ha arreglado esto en la biblioteca de soporte v23.2 . El problema se corrige al actualizar esta línea en build.gradle
después de actualizar su repositorio de soporte con SDK Manager:
compile 'com.android.support:recyclerview-v7:23.2.0'
Llame a los notifyDataSetChanged()
o notifyItemChanged(int position)
del RecyclerView.Adapter
de la MAIN THREAD . Llamarlo desde un AsyncTask
puede dar como resultado que el subproceso principal no actualice el ImageView
. Su más conveniente tener un método de la devolución de llamada en el trabajo de la actividad / del fragmento como oyente, y tenerlo llamado por el AsyncTask
en onPostExecute()
int wantedPosition = 25; // Whatever position you're looking for int firstPosition = linearLayoutManager.findFirstVisibleItemPosition(); // This is the same as child #0 int wantedChild = wantedPosition - firstPosition; if (wantedChild < 0 || wantedChild >= linearLayoutManager.getChildCount()) { Log.w(TAG, "Unable to get view for desired position, because it's not being displayed on screen."); return; } View wantedView = linearLayoutManager.getChildAt(wantedChild); mlayoutOver =(LinearLayout)wantedView.findViewById(R.id.layout_over); mlayoutPopup = (LinearLayout)wantedView.findViewById(R.id.layout_popup); mlayoutOver.setVisibility(View.INVISIBLE); mlayoutPopup.setVisibility(View.VISIBLE);
Este código funciona para mí.
Tuve el mismo problema, acabo de fijar una anchura y una altura fijas para el ImageView. Intente eso y vea donde usted consigue. También puedes usar un lib para esto, yo uso Square Picasso y lo conseguí trabajando con RecyclerView.
- ¿Cómo forzar la instalación de la aplicación Android en el entorno de desarrollo?
- ¿Cómo mostraría una vista como una superposición de otra?