11 votes

Quel adaptateur utiliser - BaseAdapter ou ArrayAdapter ?

J'ai une chaîne JSON avec les multiples instances de ce qui suit

  1. Nom
  2. Message
  3. Horodatage
  4. Url de la photo du profil

Je veux créer un ListView où chaque liste aura les éléments ci-dessus. Quel est le meilleur adaptateur que je dois étendre pour ce cas particulier, pour créer un adaptateur personnalisé ?

10voto

jkschneider Points 4014

Je suppose que vous avez analysé la chaîne JSON pour en faire un modèle objet avant d'envisager l'un ou l'autre cas... appelons cette classe Profil.

Stratégie 1

Un ArrayAdapter est suffisant avec une méthode getView(..) surchargée qui concaténera vos multiples champs ensemble de la manière que vous souhaitez.

ArrayAdapter<Profile> profileAdapter = new ArrayAdapter<Profile>(context, resource, profiles) {
   @Override
   public View getView(int position, View convertView, ViewGroup parent) {
      View v;
      // use the ViewHolder pattern here to get a reference to v, then populate 
      // its individual fields however you wish... v may be a composite view in this case
   }
}

Je recommande vivement le modèle ViewHolder pour les listes potentiellement volumineuses : https://web.archive.org/web/20110819152518/http://www.screaming-penguin.com/node/7767

Cela fait une énorme différence.

  • Avantage 1. Permet d'appliquer une mise en page complexe à chaque élément du ListView.
  • Avantage 2. ne vous oblige pas à manipuler toString() pour qu'il corresponde à l'affichage prévu (après tout, la séparation de la logique du modèle et de la logique de la vue n'est jamais une mauvaise pratique de conception).

Stratégie 2

Sinon, si la méthode toString() de votre classe représentative a déjà un format acceptable pour l'affichage, vous pouvez utiliser ArrayAdapter sans surcharger getView().

Cette stratégie est plus simple, mais vous oblige à tout regrouper en une seule chaîne pour l'affichage.

ArrayAdapter<Profile> profileAdapter = new ArrayAdapter<Profile>(context, resource, profiles)

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