Memiliki pengalaman yang solid di area non-Java dan non-Android, saya belajar Android.
Saya memiliki banyak kebingungan dengan area yang berbeda, salah satunya adalah cara menangani klik tombol. Setidaknya ada 4 cara untuk melakukan itu (!!!), semuanya tercantum secara singkat di sini
untuk tujuan konsistensi saya akan mencantumkannya:
Minta anggota
View.OnClickListener
kelas dalam aktivitas dan tetapkan ke instance yang akan menanganionClick
logika dalamonCreate
metode aktivitas.Buat 'onClickListener' dalam metode aktivitas 'onCreate' dan tetapkan ke tombol menggunakan setOnClickListener
Implementasikan 'onClickListener' dalam aktivitas itu sendiri dan tetapkan 'ini' sebagai pemroses tombol. Untuk kasus jika aktivitas memiliki sedikit tombol, id tombol harus dianalisis untuk menjalankan pengendali 'onClick' untuk tombol yang sesuai
Memiliki metode publik pada aktivitas yang mengimplementasikan logika 'onClick' dan menetapkannya ke tombol dalam deklarasi xml aktivitas
Pertanyaan 1:
Apakah itu semua metode, apakah ada pilihan lain? (Saya tidak butuh yang lain, hanya ingin tahu)
Bagi saya, cara yang paling intuitif adalah yang terbaru: cara ini membutuhkan kode paling sedikit untuk diketik dan paling mudah dibaca (setidaknya bagi saya).
Padahal, saya tidak melihat pendekatan ini digunakan secara luas. Apa kontra untuk menggunakannya?
Pertanyaan # 2:
Apa pro / kontra untuk masing-masing metode ini? Silakan bagikan pengalaman Anda atau tautan yang bagus.
Setiap umpan balik diterima!
NB Saya sudah mencoba Google dan menemukan sesuatu untuk topik ini, tetapi satu-satunya hal yang saya temukan adalah deskripsi "bagaimana" melakukan itu, bukan mengapa itu baik atau buruk.
onCreate()
yang tidak terlalu lama. Tugas pendengar klik dan kelas anonim dapat difaktorkan menjadi metode helper terpisah yang dipanggil darionCreate()
.# 1 Saya sering menggunakan yang terakhir ketika memiliki tombol pada tata letak yang tidak dihasilkan (tetapi jelas statis).
Jika Anda menggunakannya dalam praktik dan dalam aplikasi bisnis, berikan perhatian ekstra di sini, karena saat Anda menggunakan obfuscater sumber seperti ProGuard, Anda harus menandai metode ini dalam aktivitas Anda agar tidak dikaburkan.
Untuk mengarsipkan beberapa jenis kompilasi-waktu-keamanan dengan pendekatan ini, lihat Android Lint ( contoh ).
# 2 Pro dan kontra untuk semua metode hampir sama dan pelajarannya harus:
Jika Anda harus menetapkan hal yang sama
OnClickListener
ke beberapa instance tombol, simpan di class-scope (# 1). Jika Anda membutuhkan listener sederhana untuk sebuah Button, lakukan implementasi anonim:Saya cenderung tidak mengimplementasikan
OnClickListener
dalam aktivitas, ini menjadi sedikit membingungkan dari waktu ke waktu (terutama ketika Anda mengimplementasikan beberapa event-handler lain dan tidak ada yang tahu apathis
yang dilakukan semua).sumber
Saya lebih suka opsi 4, tetapi itu masuk akal bagi saya karena saya melakukan terlalu banyak pekerjaan di Grails, Groovy, dan JavaFX. Koneksi "ajaib" antara tampilan dan pengontrol adalah umum di semua. Penting untuk memberi nama metode dengan baik:
Dalam tampilan, tambahkan metode onClick ke tombol atau widget lain:
Kemudian di kelas, tangani metode tersebut:
Sekali lagi, sebutkan metodenya dengan jelas, sesuatu yang harus Anda lakukan, dan pemeliharaan menjadi kebiasaan.
Satu keuntungan besar adalah Anda dapat menulis pengujian unit sekarang untuk metode tersebut. Opsi 1 dapat melakukan ini, tetapi opsi 2 dan 3 lebih sulit.
sumber
Cara yang paling sering digunakan adalah, deklarasi anonim
Anda juga dapat membuat objek View.OnClickListener dan menyetelnya ke tombol nanti, tetapi Anda masih perlu mengganti metode onClick misalnya
Saat aktivitas Anda mengimplementasikan antarmuka OnClickListener, Anda harus mengganti metode onClick (View v) pada tingkat aktivitas. Kemudian Anda bisa menganggap aktivitas ini sebagai tombol pemroses, karena ini sudah mengimplementasikan antarmuka dan mengganti metode onClick ()
(imho) Pendekatan ke-4 digunakan ketika beberapa tombol memiliki penangan yang sama, dan Anda dapat mendeklarasikan satu metode dalam kelas aktivitas dan menetapkan metode ini ke beberapa tombol dalam tata letak xml, Anda juga dapat membuat satu metode untuk satu tombol, tetapi dalam kasus ini saya lebih memilih untuk mendeklarasikan penangan di dalam kelas aktivitas.
sumber
Opsi 1 dan 2 melibatkan penggunaan kelas dalam yang akan membuat kode menjadi berantakan. Opsi 2 agak berantakan karena hanya akan ada satu pendengar untuk setiap tombol. Jika Anda memiliki sejumlah kecil tombol, ini tidak masalah. Untuk opsi 4 saya pikir ini akan lebih sulit untuk di-debug karena Anda harus kembali dan keempat kode xml dan java. Saya pribadi menggunakan opsi 3 ketika saya harus menangani beberapa klik tombol.
sumber
Sampel saya, Diuji di Android studio 2.1
Tombol Tentukan dalam tata letak xml
Deteksi denyut Jawa
sumber
Untuk mempermudah pernyataan asp Pertanyaan 2, Anda dapat menggunakan metode lambda seperti ini untuk menghemat memori variabel dan untuk menghindari navigasi ke atas dan ke bawah dalam kelas tampilan Anda
tetapi jika Anda ingin menerapkan acara klik ke tombol Anda sekaligus dalam suatu metode.
Anda dapat menggunakan Pertanyaan 3 oleh @D. Tran menjawab. Tapi jangan lupa untuk mengimplementasikan kelas tampilan Anda dengan
View.OnClickListener
.Selain itu, gunakan Pertanyaan # 3 dengan benar
sumber
Pertanyaan # 1 - Ini adalah satu-satunya cara untuk menangani klik tampilan.
Pertanyaan # 2 -
Opsi # 1 / Opsi # 4 - Tidak banyak perbedaan antara opsi # 1 dan opsi # 4. Satu-satunya perbedaan yang saya lihat adalah dalam satu kasus aktivitas mengimplementasikan OnClickListener, sedangkan, di kasus lain, akan ada implementasi anonim.
Opsi # 2 - Dalam metode ini kelas anonim akan dibuat. Metode ini agak rumit, karena Anda harus melakukannya beberapa kali, jika Anda memiliki banyak tombol. Untuk kelas Anonymous, Anda harus berhati-hati dalam menangani kebocoran memori.
Opsi # 3 - Padahal, ini cara yang mudah. Biasanya, Pemrogram mencoba untuk tidak menggunakan metode apa pun sampai mereka menulisnya, dan karenanya metode ini tidak digunakan secara luas. Anda akan melihat kebanyakan orang menggunakan Opsi # 4. Karena lebih bersih dari segi kode.
sumber
Ada juga opsi yang tersedia dalam bentuk berbagai pustaka yang dapat membuat proses ini sangat familier bagi orang-orang yang telah menggunakan kerangka kerja MVVM lainnya.
https://developer.android.com/topic/libraries/data-binding/
Menunjukkan contoh perpustakaan resmi, yang memungkinkan Anda untuk mengikat tombol seperti ini:
sumber
Langkah 1: Buat File XML:
Langkah 2: Buat MainActivity:
HappyCoding!
sumber