Jak działa mechanizm recyklingu ListView

Mam więc ten problem, który miałem wcześniej i naturalnie poprosiłem o pomoctutaj. Odpowiedź Luksproga była świetna, ponieważ nie miałem pojęcia, w jaki sposób ListView i GridView zoptymalizowały się przy przetwarzaniu widoków. Dzięki jego radom udało mi się zmienić sposób dodawania widoków do mojego GridView. Problem polega na tym, że mam coś, co nie ma sensu. To jest mójgetView od mojegoBaseAdapter:

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, to się dzieje, a nie na pozycji 0 ... Wygląda na pozycję 6 i pozycję 8, plus dwa w pozycji 8. Nadal próbuję zrozumieć, jak używać ListView i GridView, więc robię nie rozumiem, dlaczego tak się dzieje. Jednym z głównych powodów, dla których podejmuję to pytanie, jest pomoc innym, którzy prawdopodobnie nie wiedzą o widoku recyklingu ListView i GridView lub w jaki sposób toartykuł stawia to, mechanizm ScrapView.

Później Edycja

Dodając link do Google IO Talk, który jest w zasadzie wszystko, czego potrzebujesz, aby zrozumieć, jak działa ListView. Link był martwy w komentarzach. Użytkownik3427079 był na tyle miły, że zaktualizował ten link.Tutaj to dla łatwego dostępu.

questionAnswers(3)

yourAnswerToTheQuestion