Also habe ich dieses Problem hatte ich vor, und natürlich bat ich um Hilfe zu hier . Die Antwort von Luksprog war großartig, da ich keine Ahnung hatte, wie sich ListView und GridView durch das Recycling von Views optimiert haben. Mit seinem Rat konnte ich also ändern, wie ich meinem GridView Ansichten hinzufügte. Das Problem ist jetzt, dass ich etwas habe, das keinen Sinn ergibt. Das ist mein getView
von meinem 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;
}
}
Das Problem ist, wenn ich scrolle, passiert dies und nicht auf Position 0 ... Sieht aus wie Position 6 und Position 8, und es bringt zwei auf Position 8. Jetzt versuche ich immer noch, den Dreh raus zu bekommen, ListView und GridView zu verwenden, so wie ich es tue Ich verstehe nicht, warum das passiert. Einer der Hauptgründe, warum ich diese Frage stelle, besteht darin, anderen zu helfen, die wahrscheinlich nichts über ListView und GridViews Recycling-Ansicht oder den ScrapView-Mechanismus in diesem Artikel wissen.
Später bearbeiten
Hinzufügen eines Links zu einem Google IO-Vortrag, der im Grunde alles ist, was Sie brauchen, um zu verstehen, wie ListView funktioniert. Link war in einem der Kommentare tot. User3427079 war also nett genug, um diesen Link zu aktualisieren. Hier ist es für den einfachen Zugang.
0
) , rückgängig zu machen .
ListView
eine neue Zeile angezeigt werden muss (z. B. weiter nach unten / oben scrollen). Das Problem ist, dass die Ansicht, die gerade verschwunden ist und an zukünftigen benötigten Positionen verwendet wird, TextView
bereits hinzugefügt wurde. Dies ist das Problem. Um es zu lösen, müssen Sie es in der getView
Methode entfernen , wenn die getView
Methode für eine andere Position als aufgerufen wird 0
.