Je crée un panneau de défilement avec de nombreuses vues enfants (par exemple, des boutons). Chaque vue enfant a un emplacement fixe en fonction de son index de ligne et de colonne. Je ne peux pas les créer au début car il y en a beaucoup et je manquerai de mémoire, donc je voudrais seulement ajouter une vue enfant quand elle croise le port d'affichage de l'écran (lorsque les utilisateurs font défiler vers cette zone). Je substituez la méthode OnLayout() avec quelque chose comme ceci:Ajouter des vues enfant lors du défilement (étendu) AdapterView
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
super.onLayout(changed, l, t, r, b);
for (int row = 0; row < ROW_NUM; row++) {
ColumnAdapter columnAdapter = mRowAdapter.getItem(row);
for (int col = 0; col < COLUMN_NUM; col++) {
ItemView itemView = columnAdapter.getView(col, null, this);
if (isOnScreen(row, col)) {
itemView.layout(col * 100, row * 100, (col + 1) * 100, (row + 1) * 100);
addViewInLayout(itemView, row + col, null, true);
}
}
}
scrollTo(getScrollX(), getScrollY());
}
(ColumnAdapter est une extension de l'adaptateur et ItemView est l'extension de bouton). Cela ne fonctionnerait pas car onLayout() n'est pas appelé pendant le défilement. Que dois-je faire pour ajouter ItemViews dynamiquement lorsque l'utilisateur défile?
Bonjour Noel, merci pour la réponse. J'aimerais utiliser ListView, sauf pour le widget que je crée contient de nombreuses colonnes qui peuvent défiler ensemble, tandis que ListView gère leur propre défilement individuellement. –