Saya menyadari bahwa pertanyaan dengan kata-kata serupa telah ditanyakan sebelumnya, tetapi ini berbeda. Saya cukup baru dalam mengembangkan aplikasi Android dan saya memiliki tiga pertanyaan mengenai perbedaan antara android:onclick=""
atribut XML dan setOnClickListener
metode.
Apa perbedaan diantara keduanya? Apakah perbedaan antara kedua implementasi ditemukan pada waktu kompilasi atau waktu proses atau keduanya?
Kasus penggunaan apa yang menguntungkan untuk implementasi mana?
Perbedaan apa yang dibuat oleh penggunaan fragmen di Android dalam pilihan implementasi?
android
xml
performance
android-fragments
KG6ZVP
sumber
sumber
onclick
karena Anda perlu memastikan bahwa setiap kelas mengimplementasikan metode itu. Ini mengasumsikan bahwa Anda menggunakan tata letak lebih dari sekali. Namun, jika Anda memiliki antarmuka java untuk memastikan metode tersebut ada di semua kelas yang menerapkannya, Anda tidak perlu khawatir.android:onclick
waktu yang nyaman, tetapi saya tahu bahwa terkadang hal itu menyebabkan masalah, dan saya juga tidak dapat mengingatnya :)Jawaban:
Perbedaan Antara OnClickListener vs OnClick:
Keduanya berfungsi dengan cara yang sama, hanya yang satu diatur melalui kode java dan yang lainnya melalui kode xml.
Penerapan Kode setOnClickListener:
Button btn = (Button) findViewById(R.id.mybutton); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { myFancyMethod(v); } }); // some more code public void myFancyMethod(View v) { // does something very interesting }
Implementasi XML:
<?xml version="1.0" encoding="utf-8"?> <!-- layout elements --> <Button android:id="@+id/mybutton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Click me!" android:onClick="myFancyMethod" /> <!-- even more layout elements -->
Performa:
Keduanya sama dalam performa. Xml telah diurai menjadi kode biner saat kompilasi. jadi tidak ada kelebihan dalam Xml.
Keterbatasan:
android: onClick adalah untuk API level 4 dan seterusnya, jadi jika Anda menargetkan <1.6, Anda tidak dapat menggunakannya.
sumber
Saya terkejut tidak ada yang membicarakan hal ini, tetapi berhati-hatilah, meskipun
android:onClick
XML tampaknya menjadi cara yang nyaman untuk menangani klik,setOnClickListener
penerapannya melakukan sesuatu selain menambahkanonClickListener
. Memang, itu membuat view propertyclickable
menjadi true.Meskipun ini mungkin tidak menjadi masalah pada sebagian besar implementasi Android, menurut konstruktor ponsel, tombol selalu default ke clickable = true tetapi konstruktor lain pada beberapa model ponsel mungkin memiliki clickable = false default pada tampilan non Tombol.
Jadi pengaturan XML saja tidak cukup, Anda harus berpikir sepanjang waktu untuk menambahkan
android:clickable="true"
non tombol, dan jika Anda memiliki perangkat di mana defaultnya dapat diklik = true dan Anda lupa sekali pun untuk meletakkan atribut XML ini, Anda tidak akan memperhatikan masalah saat runtime tetapi akan mendapatkan umpan balik di pasar saat itu akan berada di tangan pelanggan Anda!Selain itu, kami tidak pernah bisa yakin tentang bagaimana proguard akan mengaburkan dan mengganti nama atribut XML dan metode kelas, jadi tidak 100% aman karena mereka tidak akan pernah memiliki bug suatu hari nanti.
Jadi jika Anda tidak pernah ingin mendapat masalah dan tidak pernah memikirkannya, lebih baik gunakan
setOnClickListener
atau pustaka seperti ButterKnife dengan anotasi@OnClick(R.id.button)
sumber
android:onClick
?Secara sederhana:
Jika Anda memiliki
android:onClick = "someMethod"
dalam xml , itu mencaripublic void someMethod
dalam kelas Aktivitas Anda.OnClickListener
dipanggil langsung dari Aktivitas Anda dan ditautkan ke beberapa hal tertentuView
. MisalnyasomeButton.setOnClickListener
dan dalam kode di bawah ini dikatakan apa yang harus dilakukan saatsomeButton
ditekan.Semoga membantu :)
sumber
Seperti yang dikatakan sebelumnya: keduanya adalah cara untuk menambahkan logika sebagai respons terhadap suatu peristiwa, dalam hal ini peristiwa 'klik'.
Saya akan memisahkan antara logika dan presentasi, seperti yang kita lakukan di dunia HTML / JavaScript: Tinggalkan XML untuk presentasi dan tambahkan pendengar acara melalui kode.
sumber
Jika Anda memiliki beberapa tombol hanya dengan satu metode, saya sarankan melakukannya di java. Tetapi jika Anda memiliki tombol dengan satu metode tertentu, onClick dalam XML akan lebih baik.
sumber
Akan lebih mudah untuk selalu menggunakan atribut android: onClick kecuali Anda memiliki alasan kuat untuk tidak melakukannya, misalnya, jika Anda membuat instance Tombol saat runtime atau Anda perlu mendeklarasikan perilaku klik dalam subkelas Fragmen.
sumber
Ada beberapa alasan mengapa Anda mungkin ingin menyetel secara terprogram
OnClickListener
. Yang pertama adalah jika Anda ingin mengubah perilaku tombol saat aplikasi Anda berjalan. Anda dapat mengarahkan tombol Anda ke metode lain sepenuhnya, atau cukup nonaktifkan tombol dengan mengaturOnClickListener
yang tidak melakukan apa-apa.Saat Anda menentukan listener menggunakan
onClick
atribut, tampilan akan mencari metode dengan nama itu hanya di aktivitas hostnya. Menyetel secara terprogramOnClickListener
memungkinkan Anda mengontrol perilaku tombol dari suatu tempat selain aktivitas hostnya. Ini akan menjadi sangat relevan saat kami menggunakanFragments
, yang pada dasarnya adalah aktivitas mini, memungkinkan Anda membangun koleksi tampilan yang dapat digunakan kembali dengan siklus hidupnya sendiri, yang kemudian dapat dirangkai menjadi aktivitas. Fragmen selalu perlu digunakanOnClickListeners
untuk mengontrol tombolnya, karena itu bukan Aktivitas, dan tidak akan dicari untuk listener yang ditentukan di onClick.sumber
Saya pikir perbedaan utama di antara mereka adalah:
OnClick: Saat Anda mengklik tombol dengan jari Anda.
OnClickListner: Ini mungkin pilihan yang lebih luas yang diterapkan dalam berbagai kode.
Misalnya ketika Anda mengetik url "ymail.com", yahoo menemukan nama pengguna dan kata sandi Anda dari browser Anda dan mengaktifkan tombol status klik untuk membuka email Anda. Tindakan ini harus diterapkan hanya di onClickListener.
Ini adalah ideku!
sumber