J'ai donc ce problème que j'avais avant, et naturellement j'ai demandé de l'aide ici . La réponse de Luksprog était excellente car je n'avais aucune idée de la façon dont ListView et GridView s'optimisaient avec le recyclage des vues. Ainsi, avec ses conseils, j'ai pu changer la façon dont j'ai ajouté des vues à mon GridView. Le problème est maintenant que j'ai quelque chose qui n'a pas de sens. C'est mon getView
de mon BaseAdapter
:
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
convertView = inflater.inflate(R.layout.day_view_item, parent, false);
}
Log.d("DayViewActivity", "Position is: "+position);
((TextView)convertView.findViewById(R.id.day_hour_side)).setText(array[position]);
LinearLayout layout = (LinearLayout)convertView.findViewById(R.id.day_event_layout);
//layout.addView(new EventFrame(parent.getContext()));
TextView create = new TextView(DayViewActivity.this);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0, (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 62, getResources().getDisplayMetrics()), 1.0f);
params.topMargin = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 1, getResources().getDisplayMetrics());
params.bottomMargin = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 1, getResources().getDisplayMetrics());
create.setLayoutParams(params);
create.setBackgroundColor(Color.BLUE);
create.setText("Test");
//the following is my original LinearLayout.LayoutParams for correctly setting the TextView Height
//new LinearLayout.LayoutParams(0, (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 60, getResources().getDisplayMetrics()), 1.0f)
if(position == 0) {
Log.d("DayViewActivity", "This should only be running when position is 0. The position is: "+position);
layout.addView(create);
}
return convertView;
}
}
Le problème est que lorsque je fais défiler, cela se produit, et pas sur la position 0 ... On dirait la position 6 et la position 8, plus cela en met deux en position 8. Maintenant, j'essaie toujours de maîtriser l'utilisation de ListView et de GridView, alors je le fais pas comprendre pourquoi cela se produit. L'une des principales raisons pour lesquelles je pose cette question est d'aider d'autres personnes qui ne connaissent probablement pas la vue de recyclage de ListView et de GridView, ou la façon dont cet article le dit, le mécanisme ScrapView.
Modifier plus tard
Ajouter un lien vers une discussion Google IO qui est essentiellement tout ce dont vous avez besoin pour comprendre le fonctionnement de ListView. Link était mort dans l'un des commentaires. Donc user3427079 était assez gentil pour mettre à jour ce lien. Ici, c'est pour un accès facile.
0
).
ListView
besoin d'une nouvelle ligne à afficher (comme continuer à faire défiler vers le bas / vers le haut). Le problème est que la vue qui vient de disparaître et qui sera utilisée aux futurs postes nécessaires a TextView
déjà ajouté, c'est le problème. Pour le résoudre, vous devez le supprimer dans la getView
méthode si la getView
méthode est appelée pour une autre position que 0
.