Saya ingin tahu perbedaan antara menggunakan BaseAdapter
dan ArrayAdapter
.
Saya telah mencapai apa yang saya inginkan ArrayAdapters
.
Apakah ini mempengaruhi kinerja ListView
antarmuka adaptor yang diimplementasikan?
Dan, pertanyaan terakhir adalah, dapatkah saya melakukan sesuatu dengan ListView
menggunakan salah satu dari ini Adapters
, atau, ada kasus tertentu di mana hanya adaptor tertentu yang dapat digunakan?
android
performance
listview
android-arrayadapter
baseadapter
Chintan Soni
sumber
sumber
Jawaban:
Inilah perbedaannya:
BaseAdapter
adalah adaptor yang sangat umum yang memungkinkan Anda melakukan apa saja yang Anda inginkan. Namun, Anda harus melakukan sedikit lebih banyak pengkodean sendiri untuk membuatnya berfungsi.ArrayAdapter
adalah implementasi yang lebih lengkap yang bekerja dengan baik untuk data dalam array atauArrayList
s. Demikian pula, ada terkaitCursorAdapter
yang harus Anda gunakan jika data Anda dalam fileCursor
. Keduanya meluasBaseAdapter
.Jika data Anda berada dalam kumpulan khusus atau jika Anda tidak menginginkan perilaku default yang
ArrayAdapter
menyediakan, Anda mungkin ingin memperluasBaseAdapter
untuk mendapatkan fleksibilitas yang Anda butuhkan.Kinerja masing-masing sangat bergantung pada bagaimana Anda menerapkannya atau mengubah perilakunya. Pada intinya, salah satu bisa sama efektifnya (terutama mengingat bahwa an
ArrayAdapter
adalah aBaseAdapter
).Anda dapat melakukan apa pun yang Anda inginkan dengan adaptor apa pun, tetapi perlu diingat bahwa
BaseAdapter
itu abstrak, jadi Anda tidak dapat menggunakannya secara langsung.sumber
ArrayAdapter
menyediakan (seperti yang disebutkan oleh @ tanis-7x) adalah hanya ada 1TextView
di dalam item daftar, sebenarnya perilaku yang sangat terbatas. Jika ada beberapa kontrol di setiap item daftar, Anda harus menggunakanBaseAdapter
dan untuk pekerjaan itu sendiri. Tentu saja Anda masih bisa menggunakanArrayAdapter
, karenaArrayAdapter
merupakanBaseAdapter
.BaseAdapter
bersifat abstrak sementaraArrayAdapter
meluasBaseAdapter
(ini adalah implementasi konkret dari aBaseAdapter
). Jika Anda meluas karenaArrayAdapter
Anda mewarisi semuaArrayAdapter
fitur dan, menimpa penerapannya, Anda dapat mengubahArrayAdapter
perilakunya. Jika Anda memperluas,BaseAdapter
Anda harus mengimplementasikan semua metode Abstrak, yang sudah diimplementasikan ArrayAdapter.tidak.
Jika penerapan di SDK memenuhi kebutuhan Anda, mengapa Anda perlu menggantinya dan menciptakan kembali roda?
Perbedaan utama di antara mereka adalah bahwa
BaseAdapter
tidak bisa dipakai sementaraArrayAdapter
bisasumber
Menanggapi 3 pertanyaan Anda:
(1) BaseAdapter , menurut dokumen Android, hanyalah kelas super dari sejumlah jenis adaptor, salah satunya adalah
ArrayAdapter
. Ada sejumlah adaptor lain yang berasal dariBaseAdapter
yang sesuai dengan tujuan yang berbeda. Akibatnya, tidak mungkin ada perbedaan efisiensi antara keduanya; Anda hanya mendapatkan akses ke sekumpulan fungsi / metode yang berbeda dengan berbagai subkelas.(2) Efisiensi Anda
ArrayAdapter
bergantung pada efisiensi apa yang Anda lakukan di dalam kelas itu, yaitu pemrosesan bitmap dan data lainnya.(3) Anda mungkin dapat menemukan cara untuk bekerja dengan Anda
ListView
menggunakan jenis adaptor yang berbeda, namun, alasannyaArrayAdapter
berhasil adalah karena biasanya masuk akal mengingat tujuannya adalah untuk membuat daftar interaktif. IniArrayAdapte
mengambilArray
, biasanya sebuahArrayList
objek, yang kemudian diproses untuk membuat informasi pendukung untukListView
. Dalam hal ini, pengaturanArrayList
->ArrayAdapter
->ListView
masuk akal secara logis.sumber
Satu lagi perbedaan antara BaseAdapter dan ArrayAdapters adalah, jika Anda memperluas adaptor larik, Anda harus memanggil konstruktor kelas super dalam konstruktor subkelas.
Tetapi tidak ada kelas super untuk BaseAdapter. Karena BaseAdapter berfungsi sebagai kelas super untuk semua adaptor lainnya
sumber
List<T> UserList;
di kelas yang meluasArrayAdapter<T>
Di sini kita tidak dapat menggunakan BaseAdapter seperti ArrayAdapter.
sumber
BaseAdapter
lebih minimal dan dapat disesuaikan.ArrayAdapter
s menerapkan penggunaan yang paling umumListAdapter
, tetapi terkadang tidak cukup.Namun, hampir semuanya bisa dicapai dengan penggunaan
ArrayAdapter
s. Jika daftar Anda sudah bekerja dengan menggunakan ArrayAdapter dengan benar, Anda tidak mendapatkan apa-apa dari BaseAdapter.Namun, jika Anda menyimpan
Context
,Arrays
atauLists
dalam implementasi ArrayAdapter, mungkin Anda ingin beralih keBaseAdapter
, seperti yangArrayAdapter
sudah diterapkan.Bagaimanapun, jika Anda melakukan itu, Anda selalu dapat menghapus item tersebut, dan menggunakan
getItem()
untuk mendapatkan item Array,getCount()
untuk mendapatkan ukuran array, dangetContext()
untuk memekarkan pandangan Anda.sumber