¿RecyclerView.ViewHolder siempre tiene que ser una clase interna?

Tengo dos RecyclerView.Adapter s que están utilizando exactamente el mismo RecyclerView.ViewHolder s como clases internas.

Quería deshacerme de la duplicación de código y hacer que estos ViewHolder una clase separada para que la nueva clase pueda ser utilizada por cualquier RecyclerView.Adapter .

Sin embargo me enfrenté a muchos problemas por ejemplo dificultad en el acceso a los objetos del adaptador. getAdapterPosition() siempre devuelve -1 .

Así que cambié de opinión y hice una clase Super RecyclerView.Adapter que es extendida por esos adaptadores y poner el ViewHolder en la superclase para que los adaptadores puedan usarlo desde la subclase.

Pero quiero saber si ViewHolder tiene que ser una clase interna. Esto me hace molesto. Por favor, no me aconsejo que combine las clases de adaptador, son completamente diferentes, ya que el ViewHolder es sólo un tipo de vista especial que puede aparecer en cualquier RecyclerView

Estoy esperando sus mejores enfoques que me hacen sentir mejor.

Saludos.

En realidad, no .

Primero usted necesita entender que por qué necesitamos clase interna?

Necesitamos clases internas donde queremos que solo una clase particular tenga esta funcionalidad. Como tenemos muchas clases internas para muchos Listeners y Button onClick y muchos más.

Así que utilizamos la clase interna para hacer las cosas privadas, cortas y simples .

Puedes hacer que esta cosa ( ViewHolder ) sea una clase separada. Pero eso no será eficiente, claro (si haces otra clase agregará una clase extra a tu proyecto) y de manera efectiva.

ViewHolder puede estar fuera de clase . La clase interna es sólo una proposición en todos los tutoriales para RecyclerView, es mejor si su ViewHolder debe tener acceso a todos los parámetros del Adaptador, incluso los privados, pero cualquier acceso u objetos pueden ser recreados por métodos de acceso en Adapter y ViewHolder.

He creado un proyecto independiente con el uso de ViewHolder como clase exterior, eche un vistazo. Enlace al repositorio – https://github.com/maciejsikora/outsideviewholder .

Creo que también Sus problemas son coused que en la primera versión de código ViewHolder era la clase interna y tiene acceso a las propiedades, después de cambiar el código de la clase externa debe ser refactorizado y todas las relaciones entre ViewHolder y Adpater debe ser comprobada.

Respuesta para la pregunta es – ViewHolder no tiene que ser la clase interna, y Sus problemas son coused implementación de código no válido de usar ViewHolder como clase fuera.

Siempre lo he utilizado como interior. Entiendo su problema y he tratado con él por un tiempo demasiado y creo que este post tiene la respuesta para ello. El tipo de esta respuesta tenía problemas con los adaptadores también.

Compruébelo aquí: https://stackoverflow.com/a/29719632/6634292

Su pregunta es una pregunta interesante;)

  • Error: Error de ejecución para la tarea ': app: mergeDebugResources'. > Se ha producido un error en el procesamiento de archivos, vea los registros para obtener detalles.
  • Implementar una función de recibo de lectura en la aplicación de mensajería de grupo de Firebase
  • HttpGet maneja las cookies de forma automática?
  • Agrega la API de datos de YouTube a Android Studio
  • Mostrar un snackbar en un evento de clic de menú en Android
  • ¿Por qué Gradle sólo incluye clases de mi biblioteca con la dependencia del proyecto
  • ProGuard para Android "java.lang.nosuchfielderror: Toast" excepción
  • Agregar oyentes diferentes para texto en TextView
  • Buscar ruta con Androids API de Google Maps
  • Cómo obtener la información de latitud y longitud de la imagen
  • ¿Cuándo se llama onAttach durante el Fragment LifeCycle?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.