Recién implementado RecyclerView
en mi código, reemplazando ListView
.
Todo funciona bien Se muestran los datos.
Pero se están registrando mensajes de error:
15:25:53.476 E/RecyclerView: No adapter attached; skipping layout
15:25:53.655 E/RecyclerView: No adapter attached; skipping layout
para el siguiente código:
ArtistArrayAdapter adapter = new ArtistArrayAdapter(this, artists);
recyclerView = (RecyclerView) findViewById(R.id.cardList);
recyclerView.setHasFixedSize(true);
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
Como puede ver, he adjuntado un adaptador para RecyclerView
. Entonces, ¿por qué sigo recibiendo este error?
He leído otras preguntas relacionadas con el mismo problema, pero ninguna de ellas ayuda.
android
android-recyclerview
recycler-adapter
equitharn
fuente
fuente
Respuestas:
¿Puede asegurarse de que está llamando a estas declaraciones desde el hilo "principal" (por ejemplo, dentro del
onCreate()
método). Tan pronto como llamo a las mismas declaraciones de un método "retrasado". En mi caso aResultCallback
, recibo el mismo mensaje.En mi
Fragment
, llamar al siguiente código desde unResultCallback
método produce el mismo mensaje. Después de mover el código alonConnected()
método dentro de mi aplicación, el mensaje desapareció ...fuente
Recibía los mismos dos mensajes de error hasta que solucioné dos cosas en mi código:
(1) Por defecto, cuando implementa métodos en el
RecyclerView.Adapter
genera:Asegúrese de actualizar su código para que diga:
Obviamente, si tiene cero elementos en sus elementos, obtendrá cero elementos que se muestran en la pantalla.
(2) No estaba haciendo esto como se muestra en la respuesta superior: CardView layout_width = "match_parent" no coincide con el ancho del RecyclerView padre
(3) EDITAR: BONIFICACIÓN: también asegúrese de configurar su
RecyclerView
así:Así no:
He visto algunos tutoriales utilizando el último método. Si bien funciona, creo que también genera este error.
fuente
public int getItemCount() { return artists == null ? 0 : artists.size(); }
y LayoutInflaterView itemView = LayoutInflater. from(parent.getContext()).inflate(R.layout.fragment_listitem, parent, false);
Tengo la misma situación con usted, la pantalla está bien, pero aparece un error en la ubicación. Esa es mi solución: (1) Inicialice el adaptador RecyclerView & bind al crear ()
(2) llame a notifyDataStateChanged cuando obtenga los datos
En el código fuente de recyclerView, hay otro hilo para verificar el estado de los datos.
En el dispatchLayout (), podemos encontrar que hay un error:
fuente
tengo este problema, un problema de tiempo es reciclarView poner en objeto ScrollView
Después de verificar la implementación, el motivo parece ser el siguiente. Si RecyclerView se coloca en un ScrollView, entonces, durante el paso de medición, su altura no se especifica (porque ScrollView permite cualquier altura) y, como resultado, se iguala a la altura mínima (según la implementación) que aparentemente es cero.
Tiene un par de opciones para solucionar esto:
(Se puede seguir
android.support.v4.widget.NestedScrollView
también)fuente
1) Crear ViewHolder que no hace nada :)
2) Nuevamente cree RecyclerView que no hace nada :)
3) Ahora, cuando su reciclador real no esté listo, simplemente use el ejemplo como se muestra a continuación.
Sin embargo, esta no es la mejor solución, ¡pero funciona! Espero que esto sea útil.
fuente
Ocurre cuando no está configurando el adaptador durante la fase de creación:
Simplemente mueva la configuración del adaptador a onCreate con datos vacíos y cuando tenga la llamada de datos:
fuente
Comprueba si no has llamado a este método en tu adaptador
fuente
Asegúrese de configurar el administrador de diseño para su RecyclerView de la siguiente manera:
En lugar de
LinearLayoutManager
, también puede usar otros administradores de diseño.fuente
Tuve el mismo error, lo arreglé haciendo esto si está esperando datos como yo usando la actualización o algo así
Poner antes de crear
Ponlos en tu Oncreate
Cuando recibes datos puestos
Ahora ingrese a su clase ArtistArrayAdapter y haga lo que hará si su matriz está vacía o es nula, hará que GetItemCount devuelva 0, de lo contrario, tendrá el tamaño de la matriz de artistas
fuente
Estas líneas deben estar en
OnCreate
:fuente
Esto sucede porque el diseño inflado real es diferente del que usted está refiriendo mientras encuentra el recyclerView. De manera predeterminada, cuando crea el fragmento, el método onCreateView aparece de la siguiente manera:
return inflater.inflate(R.layout.<related layout>,container.false);
En lugar de eso, cree la vista por separado y úsela para hacer referencia a recyclerView
View view= inflater.inflate(R.layout.<related layout>,container.false); recyclerview=view.findViewById(R.id.<recyclerView ID>); return view;
fuente
Primero inicialice el adaptador
Cuando haya un cambio en el conjunto de datos, simplemente llame al método updateComments.
fuente
Para aquellos que usan
RecyclerView
dentro de un fragmento y lo inflan desde otras vistas: al inflar la vista de fragmento completo, asegúrese de vincularloRecyclerView
a su vista raíz.Estaba conectando y haciendo todo por el adaptador correctamente, pero nunca hice el enlace. Esta respuesta de @Prateek Agarwal lo tiene todo para mí, pero aquí hay más detalles.
Kotlin
Java
fuente
Simplemente reemplace el código anterior con esto y debería funcionar. Lo que hizo mal es que llamó a setAdapter (adaptador) antes de llamar al administrador de diseño.
fuente
Esto es realmente un simple error que está recibiendo, no hay necesidad de hacer ningún código en esto. Este error ocurre debido al archivo de diseño incorrecto utilizado por la actividad. Por IDE, automáticamente creé un diseño v21 de un diseño que se convirtió en un diseño predeterminado de la actividad. Todos los códigos que hice en el archivo de diseño anterior y en el nuevo solo tenían algunos códigos xml, lo que condujo a ese error.
Solución: copie todos los códigos del diseño anterior y péguelo en el diseño v 21
fuente
En mi caso, estaba configurando el adaptador dentro de la
onLocationChanged()
devolución de llamada Y la depuración en el emulador. Como no detectó un cambio de ubicación, nunca disparó. Cuando los configuré manualmente en los controles extendidos del emulador funcionó como se esperaba.fuente
He resuelto este error. Solo necesita agregar el administrador de diseño y agregar el adaptador vacío.
Me gusta este código:
fuente
Simplemente agregue lo siguiente a
RecyclerView
Ejemplo:
fuente
Tuve este error e intenté arreglarlo por un tiempo hasta que encontré la solución.
Hice un método privado buildRecyclerView, y lo llamé dos veces, primero en onCreateView y luego después de mi devolución de llamada (en la que obtengo datos de una API). Este es mi método buildRecyclerView en mi Fragmento:
Además, tengo que modificar el método get-Item-Count en mi adaptador, porque en On-Create-View la lista es nula y se produce un error. Entonces, mi get-Item-Count es el siguiente:
fuente
En mi situación, era un componente olvidado que se ubica en la clase ViewHolder pero no estaba ubicado en el archivo de diseño
fuente
Tuve el mismo problema y me di cuenta de que estaba configurando tanto el LayoutManage r como el adaptador después de recuperar los datos de mi fuente en lugar de configurar los dos en el método onCreate .
Luego notificó al adaptador sobre el cambio de datos
fuente
Este problema se debe a que no está agregando ninguno
LayoutManager
para suRecyclerView
.Otra razón es porque está llamando a este código en un NonUIThread. Asegúrese de llamar a esta llamada en UIThread.
La solución es solo que tiene que agregar un
LayoutManager
paraRecyclerView
antessetAdapter
en el subproceso de interfaz de usuario.fuente
Mi problema era que mi vista de reciclador se veía así
Cuando debería haber parecido así
fuente
En su
RecyclerView
clase de adaptador, por ejemploMyRecyclerViewAdapter
, cree un constructor con los siguientes parámetros.mData
son los datos que pasará al adaptador. Es opcional si no tiene datos para pasar.mInflater
es elLayoutInflater
objeto que ha creado y que utiliza en laOnCreateViewHolder
función del adaptador.Después de esto, conecta el adaptador en MainActivity o donde desee en el hilo principal / UI correctamente como
fuente
Se resuelve configurando la lista vacía inicializada y el adaptador en la parte inferior y llamando a notifyDataSetChanged cuando se obtienen resultados.
fuente
Perdí 16 minutos de mi vida con este problema, así que solo admito este error increíblemente vergonzoso que estaba cometiendo: estoy usando Butterknife y ato la vista en onCreateView en este fragmento.
Me llevó mucho tiempo descubrir por qué no tenía un administrador de diseño, pero obviamente las vistas se inyectan para que no sean nulas, por lo que el reciclador nunca será nulo ... ¡vaya!
Si tiene un problema como este, rastree su vista y use algo como
uiautomatorviewer
fuente
No era una gran respuesta, pero también tenía el mismo problema, incluso con el código correcto. A veces, es la marca más simple. En este caso, el error del OP también puede faltar
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
en el Manifiesto, que reproduce el mismo error.fuente
En mi caso sucedió porque incruste un RecyclerView en un LinearLayout.
Anteriormente tenía un archivo de diseño que solo contenía un RecyclerView raíz de la siguiente manera
Creo que el problema está dentro de las 3 líneas separadas. De todos modos, creo que es un problema simple, mañana estaré trabajando en ello; Pensé que debería escribir lo que encontré antes de olvidarme de este hilo.
fuente
Añadiendo otra respuesta desde que encontré este hilo buscando en Google el error. Estaba tratando de inicializar un
PreferenceFragmentCompat
pero olvidé inflar el XML de preferencia deonCreatePreferences
esta manera:El error fue un misterio hasta que me di cuenta de que
PreferenceFragmentCompat
debe estar usandoRecyclerView
internamente.fuente
// Esto ocurre cuando no está configurando el adaptador durante la fase de creación: Llamada notifyDataSetChanged () cuando la respuesta de la API está recibiendo Su Trabajo
fuente