¿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;)

  • Retrofit: 500 error de servidor interno
  • Enfoque para crear complejos dibujos 3D en OpenGL ES (en Android)?
  • Skype comienza a marcar y se bloquea después de 2 segundos - Android
  • Error de generación de Gradle: no se puede acceder al archivo de clase ITest bad: Método por defecto de ITest.class encontrado en la versión 50.0 classfile
  • ¿Hay una manera de mostrar los números primero en el teclado virtual para Android?
  • NetWork Sobre el hilo principal Excepción
  • ¿Cómo puedo obtener el contexto de la aplicación de un servicio de Android?
  • ¿Por qué java.text.DateFormat devuelve el mismo formato de fecha para en_US y en_GB en Android?
  • Android: configuración de un fondo en 4 vistas de imagen
  • Jar Mismatch Se encontraron 2 versiones de android-support-v4.jar en la lista de dependencias
  • Regex palabra entera
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.