Saya ingin tahu apa yang membedakan negara bagian tersebut. Saya tidak menemukan halaman web yang mengklarifikasi ini.
android
android-view
selected
checked
Louis
sumber
sumber
Jawaban:
Perbedaan Checked dan Activated sebenarnya cukup menarik. Bahkan dokumentasi Google meminta maaf (penekanan di bawah ditambahkan):
Jadi inilah perbedaannya:
ListView (setelah Honeycomb) memanggil setChecked () ATAU setActivated () bergantung pada versi Android seperti di bawah ini (diambil dari kode sumber Android):
Perhatikan variabel mCheckStates. Ini melacak posisi mana dalam daftar Anda yang diperiksa / diaktifkan. Ini dapat diakses melalui, misalnya, getCheckedItemPositions (). Perhatikan juga bahwa panggilan ke ListView.setItemChecked () memanggil hal di atas. Dengan kata lain, itu bisa disebut setItemActivated ().
Sebelum Honeycomb kami harus menerapkan solusi untuk mencerminkan state_checked di item daftar kami. Ini karena ListView memanggil setChecked () HANYA di Tampilan paling atas dalam tata letak (dan tata letak tidak menerapkan checkable) ... dan TIDAK menyebar tanpa bantuan. Solusi tersebut adalah dalam bentuk berikut: Perluas tata letak root untuk mengimplementasikan Checkable. Dalam konstruktornya, secara rekursif temukan semua turunan yang mengimplementasikan Checkable. Saat setChecked () dll ... dipanggil, teruskan panggilan ke Tampilan tersebut. Jika tampilan tersebut mengimplementasikan daftar negara yang dapat digambar (misalnya Kotak Centang) dengan drawable yang berbeda untuk state_checked, maka status yang dicentang akan tercermin di UI.
Untuk membuat latar belakang yang bagus ke item daftar setelah Honeycomb, yang perlu Anda lakukan adalah memiliki daftar status yang dapat digambar dengan dapat digambar untuk state_activated seperti ini (dan tentu saja gunakan setItemChecked ()):
Untuk melakukan latar belakang yang bagus ke item daftar sebelum HoneyComb Anda akan melakukan sesuatu seperti di atas untuk state_checked dan Anda JUGA perlu memperluas tampilan teratas Anda untuk mengimplementasikan antarmuka Checkable. Di dalamnya, Anda kemudian perlu memberi tahu Android apakah status yang Anda implementasikan benar atau salah dengan mengimplementasikan onCreateDrawableState () dan memanggil refreshDrawableState () setiap kali status berubah.
... dan kode untuk mengimplementasikan Checkable yang dikombinasikan dengan state_checked di RelativeLayout bisa jadi:
Berkat yang berikut:
http://sriramramani.wordpress.com/2012/11/17/custom-states/
Stackoverflow: Cara menambahkan status tombol kustom
Stackoverflow: Tampilan Custom Checkable yang merespons Selector
http://www.charlesharley.com/2012/programming/custom-drawable-states-in-android/
http://developer.android.com/guide/topics/resources/drawable-resource.html#StateList
http://blog.marvinlabs.com/2010/10/29/custom-listview-ability-check-items/
sumber
Selection is a transient property, representing the view (hierarchy) the user is currently interacting with. Activation is a longer-term state that the user can move views in and out of. For example, in a list view with single or multiple selection enabled, the views in the current selection set are activated. (Um, yeah, we are deeply sorry about the terminology here.)
sumbersetItemChecked()
dan kemudian menggunakan selektor dengan propertiandroid:state_activated="true"
Menurut dok :
android: state_selected Boolean . "
true
" jika item ini harus digunakan saat objek adalah pilihan pengguna saat ini saat menavigasi dengan kontrol arah (seperti saat menavigasi daftar dengan d-pad); "false
" jika item ini harus digunakan saat objek tidak dipilih. Status yang dipilih digunakan saat fokus (android: state_focused) tidak memadai (seperti saat tampilan daftar memiliki fokus dan item di dalamnya dipilih dengan d-pad).android: state_checked Boolean . "
true
" jika item ini harus digunakan saat objek dicentang; "false
" jika harus digunakan saat objek tidak dicentang.android: state_activated Boolean . "
true
" jika item ini harus digunakan saat objek diaktifkan sebagai pilihan tetap (seperti untuk "menyorot" item daftar yang dipilih sebelumnya dalam tampilan navigasi tetap); "false
" jika harus digunakan saat objek tidak diaktifkan. Diperkenalkan di API level 11 .Saya pikir dokumennya cukup jelas, jadi apa masalahnya?
sumber
Berikut adalah solusi lain untuk masalah ini: https://github.com/jiahaoliuliu/CustomizedListRow/blob/master/src/com/jiahaoliuliu/android/customizedlistview/MainActivity.java
Saya telah mengganti metode setOnItemClickListener dan memeriksa kasus yang berbeda dalam kode. Tapi yang pasti solusi Marvin jauh lebih baik.
sumber