Comment ajouter même à la vue parent à plusieurs reprises par le gonflant qu'une seule fois
J'ai un LinearLayout avec orientation verticale en tant que parent, je veux ajouter quelques vue par programmation à plusieurs reprises à ce parent. Maintenant je suis à gonfler l'enfant chaque fois que l'obtention de nouvelles références pour chaque élément de l'INTERFACE utilisateur avant d'ajouter d'un parent. Cela ne semble pas être très efficace, est-il une meilleure manière de faire ceci.
Actuel code que j'utilise est ci-dessous, Si je me gonfler qu'une seule fois avant la boucle for-je obtenir de l'erreur d'exécution", il a précisé enfant a déjà une mère. Vous devez appeler removeView() sur le parent de l'enfant d'abord".
LayoutInflater inflator = LayoutInflater.from(getBaseContext());
LinearLayout parentPanel = findViewById(R.id.parent_pannel);
ArrayList<String> myList = getData();
for(String data : myList) {
//inflate child
View item = inflator.inflate(R.layout.list_item, null);
//initialize review UI
TextView dataText = (TextView) item.findViewById(R.id.data);
//set data
dataText.setText(data);
//add child
parentPanel.addView(item);
}
- Je suis d'accord, ce serait chouette si il y avait un moyen facile de "cloner" les points de vues, mais je n'ai pas encore trouver. Gonfler encore et il est. Cependant, je dois dire qu'à partir de votre extrait de code, il me semble que vous voudriez utiliser un
ListView
. - J'ai peur que c'est par la conception. Vous ne pouvez pas avoir plusieurs parents pour un point de vue, ainsi que d'ajouter même à la vue de la mère à plusieurs reprises. Il serait assez difficile d'écrire du code sans bug pour ViewGroups (et les scénarios similaires) si ce n'était pas ainsi.
- Je n'ai pas la conception de ma mise en page à utiliser ListView, car il aurait pu rendre le code plus complexe parce que la façon dont je veux que chaque chose à être jeté dehors. Je suppose que, pour l'efficacité, je dois passer le tout à la liste.
- La raison pour laquelle je le signaler, c'est que
ListView
recycle Vues pour cette même raison. Puisque vous ne voyez que des N points de vue à un moment il ne se gonfle celles qui sont nécessaires, et puis il suffit de les réutilise. Quelque chose à considérer si vous voyez vous-même en ajoutant un peu de vues. - Vues dans la plupart des cas ne sera pas plus de 10, donc à l'aide d'ListView ne serait pas nécessairement améliorer les performances en que beaucoup.
- Déplacer à la liste Seulement. Vous pouvez dessiner tous les possibles de vue à l'aide que. Le code que vous essayez, vous aurez à gonfler à chaque fois un nouveau point de vue pour l'ajouter avec succès.
- J'aurais pensé que gonfler xml même page plusieurs fois en fait crée des objets distincts, mais de la même structure. Pourquoi les h.ll ne serait-ce pas possible? Par ailleurs, une ListView n'est pas toujours une option: vous avez tout dans un ScrollView - vous ne pouvez pas avoir une ListView dans un ScrollView. Gonfler les mises en page de document xml est grande dans ce cas.
Vous devez vous connecter pour publier un commentaire.
Avez-vous fait vérifier si gonfler est lent? Autant que je sache, le gonflage point de vue est très rapide (presque aussi rapide que la création de vues manuellement).
Il peut être surprenant pour vous d'entendre mais de gonfler dans le fait de ne pas analyser les XMLs à tous. XMLs pour la mise en page sont analysées et pré-traitées au moment de la compilation, qui sont enregistrées sous une forme binaire qui rend la vue d'inflation très efficace (c'est pourquoi vous ne pouvez pas gonfler une vue à partir d'un fichier XML généré au moment de l'exécution).
Je ne suis pas sûr de ce que votre point de vue est mais avez-vous le créer manuellement plus de gonfler le XML:
Mais oui ta clairement d'essayer quelque chose qui a été fait pour vous avec Simple ListView & API
Vous ne pouvez pas, même si vous essayez de créer un
new view
de l'ancienview
objet l'objet sera passé par référence n'est pas la valeur, et donc vous aurez obtenu un Exception comme le childAlreadyHasParent, et donc, le seul moyen est de mettre leview
dans unfor loop
avec le nombre de fois que vous voulez qu'il soit gonflé et cette boucle doit contenir le processus de création à partir de début n'est pas seulement le gonflage des lignes.Gonfler plusieurs fois ne peut pas être réalisé de la même manière le faire au coup par coup. Espérons que cela fonctionne
Cela va fonctionner, au moins travaillé moi