¿Mostrar diferente viewType en RecyclerView basado en información en la base de datos?

Golpear un poco de un obstáculo y preguntándose cómo resolverlo, parece como el pollo y el huevo para mí, podría hacer con un nuevo par de ojos.

Tengo una base de datos con información sobre los lugares en ellos. Quiero mostrar todos los lugares ordenados por distancia en mi RecyclerView .

Realmente he logrado esto ya cuando sólo hay un viewType . Sin embargo, esto es lo que no puedo entender, tengo que mostrar una visión diferente para los lugares que están dentro de una cierta distancia para el usuario. Así que dentro de 100 metros por ejemplo.

Esa información está dentro de mi base de datos, así que cuando getItemViewType(int position) se llama a setAdapter () mi CursorLoader no ha terminado de sacar toda la información así que obtengo una excepción de puntero nulo.

A mi pregunta:

¿Hay una manera para que yo espere a mi CursorLoader para terminar entonces trabajo con mi adaptador y no tener un Cursor nulo? Cuando trato de llamar a .setAdapter() después de que el cargador haya terminado, obtengo lo siguiente en mis registros: No adapter attached; skipping layout No adapter attached; skipping layout porque un RecyclerView necesita el adaptador ser fijado cuando se crea la actividad.

Mi getItemViewType(position) actualmente se ve así:

 if (!cursor.isClosed()) { cursor.moveToPosition(position); } if (cursor.getInt(2) <= 100) { return TYPE_NEARBY; } else { return TYPE_NOT_NEARBY; } 

Esencialmente necesito utilizar los datos en mi CursorLoader para determinar el viewType y cargar una vista diferente para esa celda. Con un ViewType funciona porque no necesito comprobar la distancia, todos son la misma vista.

¡Gracias por cualquier ayuda que pueda ofrecer!

Tengo este trabajo en el final gracias al comentario blackbelts.

Ejecutar el proceso en modo de depuración y todo funciona como se esperaba. Sólo tenía que asegurarse de que estaba haciendo las cosas correctas con los datos en mi onBindViewHolder(int position) .

El problema principal era porque tenía un "holderId" int en mi ViewHolder que era diferente a mi viewType int así que probablemente sólo los confundía.

  • ¿Cómo guardar y restaurar la posición exacta de desplazamiento de RecyclerView?
  • ¿Cómo utilizar ContentObserver con RecyclerView?
  • ¿Cómo animar las transiciones de actividad cuando se usan listas / cuadrículas / vistas de reciclador?
  • Android RecyclerView que se encuentra en un fragmento que se encuentra en un ViewPager no vuelve a cargar / refrescar las vistas si se alcanza el setOffscreenPageLimit
  • Marshmallow (23) + RecyclerView (23.1.0) el desplazamiento desordena el contenido de arriba después de eliminar el elemento (notifyItemRemoved)
  • CardView dentro de RecyclerView tiene márgenes adicionales
  • RecyclerView.ViewHolder - getLayoutPosition vs getAdapterPosition
  • Android java onClick No se pudo ejecutar el método de la actividad
  • RecyclerView no se desinscribe del adaptador en el cambio de orientación
  • Deshabilitar ItemTouchHelper para una parte de un visor
  • Cómo configurar un observador para actualizar el cajón de navegación después de que el método onActivityResult recibió un resultado de intención
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.