49 votos

Es posible extender el AbsListView para hacer nuevos ListView implementaciones?

He estado buscando en la creación de un estilo diferente de la vista de lista, como muchas otras personas, y empecé buscando ampliar AbsListView. Por el Android doc, AbsListView es:

Clase Base que puede ser utilizada para implementar virtualizado listas de elementos. Una lista no tiene una definición espacial aquí. Por ejemplo, subclases de esta clase puede mostrar el contenido de la lista en una cuadrícula, en un carrusel, como la pila, etc.

Después de un poco de esfuerzo y revisión de la ListView aplicación, que parece que no puede ser posible extender AbsListView la manera ListView gracias al acoplamiento de las dos clases y la imposibilidad de acceder a ciertas paquete de miembros. Me encontré con este formulario de Romain Guy:

AbsListView y AbsSpinner están diseñados para ser extendida dentro de la marco. También podría ser extendido en la 3 ª parte aplicaciones pero hicimos no exponer a todos la necesaria protegido de los campos y los métodos a propósito. Queremos ser muy cuidadosos en la forma de exponer Api a fin de no obtener cosas para futuras ampliaciones y cambios internos. Nuestro actual la recomendación es simplemente copie/pegue el código necesario en el interior de su aplicación.

Comencé a tratar de hacer esto, pero la copia de AbsListView se convierte en un agujero de conejo de copiar en un montón de otras cosas y la verdad es que apenas se parece como un caso perdido. Quería ver si alguien ha tenido éxito la ampliación de AbsListView que podría compartir una metodología.

[1] http://developer.android.com/reference/android/widget/AbsListView.html

[2] https://groups.google.com/forum/?fromgroups#!topic/android-developers/UhbR1tpVvF0

8voto

4voto

Alexander Lucas Puntos 10258

El post es circa 2010, pero su evaluación sigue siendo cierto hoy en día. Ciertos métodos necesarios y los campos están protegidos, con el fin de prevenir futuras incompatibilidades que podrían resultar de los cambios en el funcionamiento interno de AbsListView.

La mejor solución es todavía copia el código para AbsListView en el proyecto, junto con las dependencias necesarias (el agujero del conejo usted ha mencionado).

En el ínterin, si usted quiere describir qué tipo de Vista que estamos tratando de construir, puede ser capaz de señalar en una dirección que sea un poco más fácil de crear su propia AbsListView?

2voto

Scott Leslie Puntos 502

He tenido la misma experiencia tratando de subclase ListView y AbsListView de desarrollar un 2D de desplazamiento de la hoja de cálculo. Terminé con mi propia subclase de ViewGroup que se encarga el diseño y una subclase de TwoDScrollView para controlar el desplazamiento. Las partes más duras están recibiendo lanza para que funcione correctamente (es decir. crear y colocar los nuevos puntos de vista antes de desplazarse a la vista) y la sincronización de la vista de las posiciones entre desplazable componentes. Con suficiente tiempo, sin embargo, es posible crear un robusto componente que se extrae datos de un Cursor y desplaza alrededor con bastante fluidez y rapidez.

-3voto

Nickolaus Puntos 1362

Básicamente, usted puede extender el abs ListView en su clase personalizada y reemplazar los estilos, después de llamado super en las funciones que va a reemplazar (por ejemplo, oncreate). Pero si usted acaba de wan al estilo de su ListView o de otro widget que me gustaría echar un vistazo en este sitio se crea objetos dibujables y estilos.
Si, a continuación, agregue el dibujables y estilos que puede utilizar con el sistema ABS sólo se necesita añadir los elementos de la generada themes.xml su principal abs tema y todo va a ser prestado correctamente.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by: