¿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
.
- Rotar vídeo con mp4parser de acuerdo con la cámara utilizada
- Divide la declaración de servicio de Retrofit en múltiples interfaces
- Android: ¿Proporciona sugerencias de búsqueda recientes sin actividad de búsqueda?
- Genéricos Java: ¿Cómo envolver / extender el caso de prueba de Android Activity?
- El hilo no vuelve después de notifyall ()
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.
- Cómo pasar valores hexadecimales a una cadena - Android
- Versión sin soporte de major.minor 52.0 en mi aplicación
- No se puede resolver el método 'show (android.support.v4.app.FragmentManager, java.lang.String)
- Convertir fecha GMT DateTime
- Diferencia entre la clase DataInputStream / DataOutputStream y la clase InputStream / OutputStream
- GSON esperaba BEGIN_ARRAY pero era BEGIN_OBJECT
- Desafortunadamente MyApp se ha detenido. ¿Como puedo resolver esto?
- Cómo convertir ZonedDateTime / OffsetDateTime a Date usando ThreeTenABP?
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;)
- Cómo crear menú emergente como submenú de otro elemento de menú de menú emergente
- Android webView: Es posible configurar el teclado numérico primero por defecto cuando se usa input type = text