Selama Google IO terbaru, ada presentasi tentang penerapan aplikasi klien yang tenang. Sayangnya, itu hanya diskusi tingkat tinggi tanpa kode sumber implementasi.
Dalam diagram ini, di jalur pengembalian ada berbagai panggilan balik yang berbeda ke metode lain.
Bagaimana saya menyatakan apa metode ini?
Saya mengerti ide panggilan balik - sepotong kode yang dipanggil setelah peristiwa tertentu terjadi, tetapi saya tidak tahu bagaimana cara mengimplementasikannya. Satu-satunya cara saya menerapkan panggilan balik sejauh ini telah mengesampingkan berbagai metode (misalnya onActivityResult).
Saya merasa seperti saya memiliki pemahaman dasar tentang pola desain, tapi saya terus tersandung bagaimana menangani jalur pengembalian.
Jawaban:
Dalam banyak kasus, Anda memiliki antarmuka dan meneruskan objek yang mengimplementasikannya. Dialog misalnya memiliki OnClickListener.
Sama seperti contoh acak:
Saya mungkin mengacaukan sintaks di opsi 2. Ini lebih awal.
sumber
Ketika sesuatu terjadi dalam pandangan saya, saya memulai suatu peristiwa yang didengarkan aktivitas saya:
// DEKLARASI DALAM (KUSTOM)
// DEKLARASI DALAM AKTIVITAS
Jika Anda ingin tahu lebih banyak tentang komunikasi (panggilan balik) antar fragmen, lihat di sini: http://developer.android.com/guide/components/fragments.html#CommunicatingWithActivity
sumber
Tidak perlu mendefinisikan antarmuka baru ketika Anda dapat menggunakan yang sudah ada:
android.os.Handler.Callback
. Lewati objek bertipe Callback, dan aktifkan callbackhandleMessage(Message msg)
.sumber
Contoh untuk menerapkan metode panggilan balik menggunakan antarmuka.
Tentukan antarmuka, NewInterface.java .
paket javaapplication1;
Buat kelas baru, NewClass.java . Ini akan memanggil metode panggilan balik di kelas utama.
Kelas utama, JavaApplication1.java, untuk mengimplementasikan antarmuka metode NewInterface - callback (). Ini akan membuat dan memanggil objek NewClass. Kemudian, objek NewClass akan memanggil metode callback () pada gilirannya.
sumber
untuk mengklarifikasi sedikit pada jawaban naga (karena butuh beberapa saat untuk mencari tahu apa yang harus dilakukan dengan
Handler.Callback
):Handler
dapat digunakan untuk mengeksekusi callback di saat ini atau utas lainnya, dengan meneruskannyaMessage
s. yangMessage
memegang data yang akan digunakan dari callback. aHandler.Callback
dapat diteruskan ke konstruktorHandler
untuk menghindari perpanjangan Handler secara langsung. dengan demikian, untuk mengeksekusi beberapa kode melalui panggilan balik dari utas saat ini:EDIT: baru sadar ada cara yang lebih baik untuk mendapatkan hasil yang sama (kontrol minus kapan tepatnya melakukan panggilan balik):
sumber
Callback
versi yang lebih baik karena Anda mungkin belum tentu memiliki akses ke data yang dibutuhkanRunnable.run()
pada saat Anda membangunnyaAnda juga dapat menggunakan
LocalBroadcast
untuk tujuan ini. Berikut ini adalah kutipan cepatBuat penerima siaran:
Ini adalah bagaimana Anda dapat memicunya
batalkan pendaftaran penerima di onPause:
sumber