50 votes

Est-il possible d'étendre AbsListView pour faire de nouvelles implémentations de ListView?

J'ai été à la recherche à la création d'un style différents de la vue liste, comme beaucoup d'autres personnes, et j'ai commencé par étendre AbsListView. Par Android doc, AbsListView est:

La classe de Base qui peuvent être utilisés pour mettre en œuvre virtualisé des listes d'éléments. Une liste n'a pas une définition spatiale ici. Par exemple, subclases de cette classe peuvent afficher le contenu de la liste dans une grille, dans un carrousel, des cheminées, etc.

Après quelques efforts et l'examen de la liste de mise en œuvre, il ressemble, il peut ne pas être possible d'étendre AbsListView la façon liste ne en raison du couplage des deux classes et l'impossibilité d'accéder à certains membres. Je suis tombé sur ce formulaire de Romain Guy:

AbsListView et AbsSpinner sont conçus pour être étendu au sein de la cadre. Ils pourraient également être étendue dans les applications 3ème partie, mais nous n'avons ne pas exposer tous les champs protégés et de méthodes sur l'objet. Nous voulons être très prudent dans la façon dont nous exposer ces Api afin de ne pas obtenir des trucs pour de futures extensions et les changements internes. Notre actuel la recommandation est que vous simplement copier/coller le code que vous avez besoin à l'intérieur de votre app.

J'ai commencé à essayer de faire cela, mais la copie AbsListView devient un trou de lapin de la copie dans un tas d'autres choses et il semble juste comme une proposition perdante. Je voulais voir si quelqu'un a eu du succès l'extension de AbsListView qui pourrait partager une méthodologie.

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

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

8voto

4voto

Alexander Lucas Points 10258

Le poste est vers 2010, mais son évaluation reste vrai aujourd'hui. Certaines méthodes et les champs sont protégés, afin de prévenir de futures incompatibilités qui pourraient résulter de la modification de la structure interne des AbsListView.

La meilleure solution est encore de copier le code AbsListView dans votre projet, avec les dépendances nécessaires (le trou de lapin que vous avez mentionné).

En attendant, si vous voulez pour décrire ce type de Vue que vous essayez de construire, nous pourrions être en mesure de vous diriger dans une direction qui est légèrement plus facile que de créer votre propre AbsListView?

2voto

Scott Leslie Points 502

J'ai eu la même expérience en essayant de la sous-classe ListView et AbsListView de développer un 2D à défilement feuille de calcul. J'ai fini avec mes propres sous-classe de la ViewGroup qui gère à la mise en page et une sous-classe de TwoDScrollView pour gérer le défilement. Parties les plus difficiles sont se jette à fonctionner correctement (ie. de créer et de placer de nouveaux points de vue avant de défiler dans la vue) et la synchronisation de voir les positions entre le défilement des composants. Avec assez de temps, cependant, il est possible de créer un élément robuste qui extrait des données à partir d'un Curseur et défile autour de fait tout en douceur et rapidement.

-3voto

Nickolaus Points 1362

Fondamentalement, vous pouvez prolonger l'abs ListView dans votre classe personnalisée et de remplacer les styles, après avoir appelé super dans les fonctions vous sont impérieuses (par exemple oncreate). Mais si vous wan pour le style de votre ListView ou un autre widget, je voudrais prendre un coup d'oeil à ce site , il crée un drawable et de styles.
Si vous ajoutez ensuite l'un drawable et de styles que vous pouvez les utiliser avec de l'ABS vous avez juste besoin d'ajouter les éléments de la themes.xml votre principale abs thème et tout sera rendu correctement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X