Więc mam ten problem miałem przed i naturalnie poprosiłem o pomoc na tutaj . Odpowiedź Luksprog była świetna, ponieważ nie miałem pojęcia, jak ListView i GridView zoptymalizowały się dzięki recyklingowi widoków. Dzięki jego radom mogłem zmienić sposób dodawania widoków do mojego widoku GridView. Problem w tym, że mam teraz coś, co nie ma sensu. To jest moje getView
z mojego 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;
}
}
Problem polega na tym, że kiedy przewijam, dzieje się tak, a nie na pozycji 0 ... Wygląda na to, że pozycja 6 i pozycja 8, plus umieszcza dwie na pozycji 8. Teraz wciąż próbuję zawiesić korzystanie z ListView i GridView, więc robię nie rozumiem, dlaczego tak się dzieje. Jednym z głównych powodów , dla których zadaję to pytanie, jest pomoc innym, którzy prawdopodobnie nie wiedzą o ListView i widoku recyklingu GridView lub o mechanizmie ScrapView, jak to ujęto w tym artykule .
Później Edytuj
Dodanie linku do rozmowy Google IO, czyli w zasadzie wszystko, czego potrzebujesz, aby zrozumieć, jak działa ListView. Link nie zdawał sobie sprawy z komentarzy. Więc user3427079 był na tyle miły, że zaktualizował ten link. Tutaj jest dla łatwego dostępu.
0
).
ListView
pojawi się potrzeba nowego wiersza (np. Kontynuowanie przewijania w dół / w górę). Problem w tym, że widok, który po prostu zniknął i będzie używany na przyszłych potrzebnych stanowiskach, TextView
już do niego dodano, to jest problem. Aby go rozwiązać, musisz usunąć go z getView
metody, jeśli getView
metoda jest wywoływana dla innej pozycji niż 0
.