Je viens d'écrire un code qui ajoute plusieurs vues, chacune utilisant un gestionnaire. Ceux-ci sont ajoutés en utilisant une boucle for. Ceux-ci ajoutent juste correctement. Ensuite, j'ai essayé d'ajouter un bouton après la boucle for sans utiliser de gestionnaire. Cette fois, le bouton était affiché en haut de la mise en page, c'est-à-dire AVANT les éléments ajoutés dans la boucle. Cela ne se produit pas si j'ajoute le bouton en utilisant le gestionnaire.Trouvé ce comportement étrange de Handlers dans android
Donc, si j'utilise le code suivant avec un gestionnaire après la boucle puis sur le bouton est ajouté au bas de la mise en page:
private void fillFeedWithData(final List<ParseObject> feedObjectList) {
LayoutInflater inflaterOfFeedItem = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
for (int i = 0; i < feedObjectList.size(); i++) {
final String jokeTitle = feedObjectList.get(i).getString("content");
final View cvFeedItem = inflaterOfFeedItem.inflate(R.layout.feed_item_theme_card, null);
final TextView tvJoke = (TextView) cvFeedItem.findViewById(R.id.tvFeedJoke);
Handler h2 = new Handler();
Runnable update2 = new Runnable() {
public void run() {
tvJoke.setText(jokeTitle);
llFragmentFeedParent.addView(cvFeedItem);
// llFragmentFeedParent is acquired in OnCreate() method
}
};
h2.post(update2);
}
final Button bNext = new Button(this);
bNext.setText("Next >");
bNext.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
Handler h3 = new Handler();
Runnable update3 = new Runnable() {
public void run() {
llFragmentFeedParent.addView(bNext);
}
};
h3.post(update3);
}
Si je le code suivant après la boucle puis sur le bouton est ajouté sur le dessus de la mise en page:
Button bNext = new Button(this);
bNext.setText("Next >");
bNext.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
llFragmentFeedParent.addView(bNext);
Alors maintenant, mon application fonctionne comme prévu avec le gestionnaire, mais je suis préoccupé par les raisons pour lesquelles cela se passait. Je pense que les gestionnaires mélangent les horaires/séquence d'exécution? Si je continue à utiliser la logique, est-il possible que le bouton, dans un téléphone mobile lent, apparaisse au-dessus ou même entre les éléments ajoutés dans la boucle?
Cela signifie que le bouton s'affichera toujours dans la position désirée. En fait, chaque élément est une mise en page compliquée et je n'avais aucune idée de comment implémenter des vues personnalisées dans une liste, donc j'ai fait ma propre solution de contournement. code. Les gestionnaires aident quand il y a 100 articles, chacun avec une image. Mais vous avez raison, je devrais apprendre à utiliser des listes, ma logique sera mieux supportée par une liste. – Usman
Et merci, vous avez répondu à ma question :) – Usman