Seperti yang anda perhatikan dalam penyesuai senarai tersuai anda, kaedah getView dipanggil berkali-kali untuk setiap baris, dan ia nampaknya dilakukan secara serampangan. Tingkah laku ini boleh mengelirukan, tetapi ia sebenarnya bukan isu dalam reka bentuk Android.
Walaupun kepercayaan umum bahawa getView hanya perlu dipanggil untuk baris yang boleh dilihat, itu tidak berlaku. Item ListView dikitar semula dan digunakan semula semasa anda menatal senarai. Untuk memudahkan kitar semula ini, ListView pra-langkah dan cache paparan untuk baris yang akan kelihatan. Proses pra-ukuran ini memerlukan berbilang panggilan untuk getView untuk menentukan dimensi paparan.
Kekurangan pesanan yang dirasakan dalam panggilan getView juga merupakan kesan sampingan daripada kitar semula. Apabila baris ditatal keluar daripada paparan, paparan berkaitannya dialih keluar daripada cache dan digunakan semula untuk paparan yang akan kelihatan. Ini bermakna susunan panggilan getView boleh berbeza-beza bergantung pada gelagat menatal pengguna.
Dalam kes anda, anda telah memberikan ListView ketinggian wrap_content. Ini memaksa ListView untuk mengukur beberapa kanak-kanak pada masa susun atur untuk menentukan ketinggiannya sendiri. Akibatnya, ListView mencipta paparan cache untuk kanak-kanak tersebut sebelum anda mula menatal.
Mekanisme kitar semula ListView adalah penting untuk mengekalkan prestasi penatalan yang lancar. Walaupun susunan dan bilangan panggilan getView mungkin kelihatan tidak menentu, ia adalah hasil sampingan semulajadi mekanisme ini dan bukan ralat atau pepijat.
Atas ialah kandungan terperinci Mengapa Kaedah getView() Android ListView Saya Dipanggil Berbilang Kali dan dalam Pesanan yang Nampaknya Rawak?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!