Saya perlu mengetahui posisi piksel dari satu elemen dalam daftar yang telah ditampilkan menggunakan file ListView
. Sepertinya saya harus mendapatkan salah satu TextView dan kemudian menggunakannya getTop()
, tetapi saya tidak tahu bagaimana cara mendapatkan tampilan anak dari file ListView
.
Pembaruan: Anak-anak dari ViewGroup
tidak sesuai 1-to-1 dengan item dalam daftar, untuk a ListView
. Alih-alih, ViewGroup
turunannya hanya sesuai dengan tampilan yang terlihat sekarang. Jadi getChildAt()
beroperasi pada indeks yang bersifat internal ViewGroup
dan tidak selalu ada hubungannya dengan posisi dalam daftar yang ListView
digunakan.
sumber
firstPosition
adalahint firstPosition = listView.getFirstVisiblePosition() - listView.getHeaderViewsCount();
untuk memperbaiki ini.ListView
sudah menangani "memindahkan" tampilan turunan setelah mendaur ulang tampilan lamaconvertView
, dll., jadi Anda dapat dijamin bahwa ituListView.getChildAt(0)
adalah tampilan terlampir pertama dari adaptor. Ini mungkin tidak sepenuhnya terlihat (dan bahkan mungkin tidak terlihat sama sekali, tergantung padaListView
ambang "visibilitas" sebelum mendaur ulang tampilan yang dianggap "digulir keluar dari tampilan")Kode ini lebih mudah digunakan:
sumber
Pencarian cepat dokumen untuk kelas ListView menghasilkan metode getChildCount () dan getChildAt () yang diwarisi dari ViewGroup. Bisakah Anda mengulanginya menggunakan ini? Saya tidak yakin tapi patut dicoba.
Ketemu di sini
sumber
Pada dasarnya, buat dua Drawable - satu transparan, dan satu lagi warna yang diinginkan. Minta fokus pada posisi yang diklik (
int position
seperti yang ditentukan) dan ubah warna baris tersebut. Kemudian berjalanlah melalui induknyaListView
, dan ubah semua baris lainnya sesuai. Ini menjelaskan saat pengguna mengkliklistview
beberapa kali. Ini dilakukan dengan tata letak khusus untuk setiap baris diListView
. (Sangat sederhana, cukup buat file tata letak baru denganTextView
- jangan setel dapat difokuskan atau diklik!).Tidak perlu adaptor khusus - gunakan
ArrayAdapter
sumber
sumber
Ini mengasumsikan Anda mengetahui posisi elemen dalam ListView:
Kemudian Anda harus bisa memanggil getLeft () dan getTop () untuk menentukan elemen pada posisi layar.
sumber
getView()
dipanggil secara internal oleh ListView, saat mengisi daftar. Anda tidak boleh menggunakannya untuk mendapatkan tampilan di posisi tersebut dalam daftar, karena memanggilgetView()
dengan null untukconvertView
penyebab adaptor memekarkan tampilan baru dari sumber tata letak adaptor (tidak mendapatkan tampilan yang sudah ditampilkan).