2012-03-09 18 views
50

He estado buscando crear una vista de lista estilísticamente diferente, como muchas otras personas, y comencé buscando ampliar AbsListView. Según el documento de Android, AbsListView es:¿Es posible extender AbsListView para hacer nuevas implementaciones de ListView?

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

Después de un poco de esfuerzo y examen de la aplicación ListView, parece que puede que no sea Es posible extender AbsListView como lo hace ListView debido al acoplamiento de las dos clases y la imposibilidad de acceder a ciertos miembros del paquete. Me encontré con este formulario Romain Guy:

AbsListView y AbsSpinner están diseñados para ser extendidos dentro del marco . También podrían extenderse en aplicaciones de terceros pero hicimos sin exponer todos los campos y métodos protegidos necesarios a propósito. Queremos ser muy cuidadosos en la forma en que exponemos dichas API para no obtener cosas para futuras extensiones y cambios internos. Nuestra recomendación actual es que simplemente copie/pegue el código que necesita dentro de su aplicación .

Empecé a intentar hacer esto pero copiar AbsListView se convierte en un agujero de conejo para copiar en un montón de otras cosas y realmente parece una propuesta perdedora. Quería ver si alguien ha tenido éxito extendiendo 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

+0

"realmente parece una propuesta perdedora": esa sería mi evaluación de la situación. – CommonsWare

+0

Gracias Mark. Eso me parece el evangelio también. –

+0

tal vez podría ser un poco más específico en cuanto a lo que quiere decir con "vista de lista estilísticamente diferente". ¿Te refieres a algo que no es una lista vertical? o ¿te refieres a algo que es vertical, pero tiene colores personalizados, vistas, encabezados, etc.? – mtmurdock

Respuesta

4

El puesto es alrededor del año 2010, pero su evaluación sigue siendo válida hoy en día. Ciertos métodos necesarios & están protegidos, con el fin de evitar futuras incompatibilidades que podrían resultar de cambiar las partes internas de AbsListView.

La mejor solución es copiar el código de AbsListView en su proyecto, junto con las dependencias necesarias (el agujero de conejo que mencionó).

Mientras tanto, si quieres describir qué tipo de Vista estás tratando de compilar, podríamos orientarte en una dirección que es un poco más fácil que crear tu propia AbsListView?

+0

Me gustaría construir una vista que presente una vista de lista horizontal, se conecte a un adaptador y recicle las vistas . Necesita ser desplazable y aceptar vistas de diferentes anchuras, aunque debe mantener una altura constante. –

+0

Ah. Es posible que desee aprovechar el trabajo que otros ya han hecho para esto. Por ejemplo, hay una vista de lista horizontal semi popular en: https://github.com/dinocore1/DevsmartLib-Android/blob/master/devsmartlib/src/com/devsmart/android/ui/HorizontalListView.java –

+0

Sí, eso es exactamente lo que estoy usando pero, para ser completamente directo, deja mucho que desear. Tuve que modificarlo en gran medida y, francamente, nunca puede hacer las cosas necesarias debido a la forma en que ciertos archivos están empaquetados en Android. Oh bueno, ya no luchas esta batalla por el momento;) –

2

He tenido la misma experiencia al intentar crear la subclase ListView y AbsListView para desarrollar una hoja de cálculo desplazable en 2D. Terminé con mi propia subclase de ViewGroup que maneja el diseño y una subclase de TwoDScrollView para manejar el desplazamiento. Las partes más difíciles hacen que los flings funcionen correctamente (es decir, crean y colocan nuevas vistas antes de que se desplacen a la vista) y sincronizan las posiciones de vista entre los componentes desplazables. Sin embargo, con tiempo suficiente, es posible crear un componente robusto que extraiga datos de un Cursor y lo desplace con bastante facilidad y rapidez.

Cuestiones relacionadas