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)