En passant Plusieurs Listes<String> dans ArrayAdapter
Je commence avec cette Activité:
adapter = new ItemAdapter(Items.this, items, totals);
setListAdapter(adapter);
Voici maintenant ItemAdapter:
public class ItemAdapter extends ArrayAdapter<String> {
private final List<String> items;
private final List<String> totals;
private final Context context;
public ItemAdapter(Context context, List<String> items,
List<String> totals) {
super(context, R.layout.item_row_layout, items);
this.context = context;
this.items = items;
this.totals = totals;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater
.inflate(R.layout.item_row_layout, parent, false);
TextView t1 = (TextView) rowView.findViewById(R.id.itemName);
TextView t2 = (TextView) rowView.findViewById(R.id.itemTotal);
String s1 = items.get(position);
t1.setText(s1);
String s2 = totals.get(position);
t2.setText(s2);
return rowView;
}
}
Maintenant, je sais que le problème est avec le constructeur, car jusqu'seulement me permettre de passer d'une Liste, pas les deux en elle. Est-il une autre façon de le faire?
- Ce n'est pas lié à votre question, mais je pense que vous pourriez vouloir regarder ce — Google I/O 2010 - le monde de La ListView. Votre
getView()
n'est pas optimisé...
InformationsquelleAutor TheLettuceMaster | 2012-07-20
Vous devez vous connecter pour publier un commentaire.
Je suggère d'utiliser un SimpleAdapter. Voici comment convertir vos Listes dans une Liste< Map<...>> (mais je recommande tout simplement de la construction d'une Liste< Map<...>> lorsque vous créez des listes séparées):
Maintenant votre
name
ettotal
sont automatiquement affichés dans une seule ligne de leur propre point de Vue sans avoir à écrire une coutume adaptateur.R.layout.item_row_layout
est la disposition que vous voulez. Je n'ai pas vu les différentes mises en avant dans votre question.this
est le problème (mais c'est impossible à dire sans voir où et comment vous le faites.) Où avez-vous mis ce code? Dans onCreate()? Vous pouvez essayer de remplacerthis
avecgetApplicationContext()
ougetBaseContext()
.Items.this
. J'espère que tout cela a aidé!Ajouter un argument de plus dans votre constructeur, pour accueillir la Liste supplémentaire; cependant, ne pas passer cette liste supplémentaire dans le super appel.
Ensuite, dans la méthode getView de l'accès que de la deuxième liste.
Regardez le code:
Pourquoi ne pas simplement joindre les deux listes?
Ensuite, vous pouvez créer votre carte, comme d'habitude, avec une seule Liste.
Une option que vous avez est de modifier le constructeur à accepter un
List<List<String>>
au lieu deList<String>
Puis au lieu de fairethis.items = items;
vous aurez à parcourir tous les sous-listes dans votre paramètre et ajouter chaque élément de votre local éléments de l'objet.Un autre et peut-être plus simple solution est de fusionner vos mulptiple listes avant de les envoyer au constructeur en tant que paramètre. c'est à dire que vous pourriez utiliser une méthode comme Liste.addAll() comme ce
autant de fois que vous avez besoin de faire une Liste qui contient tous vos articles.
Et encore une autre option est d'utiliser le MergeAdapter que CommonsGuy a créé et gracieusement open source afin de simplifier le processus en vous permettant de créer plusieurs cartes, puis les fusionner en un seul MergeAdapter au lieu de s'inquiéter au sujet de la fusion des Listes