Apakah mungkin untuk memanggil metode yang ditentukan Activity
dari ListAdapter
?
(Saya ingin membuat Button
di list's
baris dan ketika tombol ini diklik, harus melakukan metode, yang didefinisikan dalam yang sesuai Activity. Saya mencoba untuk set onClickListener
di saya ListAdapter
tapi saya tidak tahu bagaimana memanggil metode ini, apa yang dilaluinya. ..)
ketika saya menggunakan Activity.this.method()
saya mendapatkan kesalahan berikut:
No enclosing instance of the type Activity is accessible in scope
Ada ide ?
android
list
adapter
addressing
pengguna1602687
sumber
sumber
Jawaban:
Ya kamu bisa.
Di adaptor Tambahkan Bidang baru:
Di adaptor Constructor tambahkan kode berikut:
Di getView (...) dari Adapter:
ganti dengan nama kelas Anda sendiri di mana Anda melihat kode Anda, aktivitas Anda, dll.
Jika Anda perlu menggunakan adaptor yang sama ini untuk lebih dari satu aktivitas, maka:
Buat Antarmuka
Implementasikan antarmuka ini dalam aktivitas yang Anda perlukan untuk memiliki fungsi pemanggilan metode ini.
Kemudian di Adapter getView (), panggil seperti:
Kamu selesai. Jika Anda perlu menggunakan adaptor ini untuk aktivitas yang tidak memerlukan mekanisme panggilan ini, kode tidak akan dijalankan (Jika pemeriksaan gagal).
sumber
Anda bisa melakukannya dengan cara ini:
Deklarasikan antarmuka:
Biarkan Aktivitas Anda menerapkannya:
Kemudian teruskan aktivitas Anda ke ListAdater:
Dan di suatu tempat di adaptor, saat Anda perlu memanggil metode Aktivitas itu:
sumber
Asli:
Saya memahami jawaban saat ini tetapi membutuhkan contoh yang lebih jelas. Berikut adalah contoh yang saya gunakan dengan
Adapter
(RecyclerView.Adapter) danActivity
.Dalam Aktivitas Anda:
Ini akan menerapkan
interface
yang kami miliki di kamiAdapter
. Dalam contoh ini, ini akan dipanggil saat pengguna mengklik item diRecyclerView
.Di Adaptor Anda:
Di
Activity
, kami memulai kamiAdapter
dan meneruskan ini sebagai argumen kepada pembuatnya. Ini akan memulaiinterface
untuk metode panggilan balik kami. Anda dapat melihat bahwa kami menggunakan metode panggilan balik untuk klik pengguna.sumber
EventBus
seperti yang Anda sarankan?Dasar dan sederhana.
Di adaptor Anda cukup gunakan ini.
((YourParentClass) context).functionToRun();
sumber
Satu cara lagi adalah:
Menulis metode dalam adaptor Anda, misalnya public void callBack () {}.
Sekarang saat membuat objek untuk adaptor dalam aktivitas mengganti metode ini. Metode override akan dipanggil saat Anda memanggil metode di adaptor.
sumber
Untuk Kotlin:
Di adaptor Anda, cukup panggil
sumber
kondisi ini akan memungkinkan Anda untuk menjalankan sesuatu jika Kegiatan yang memiliki
GroupView
yang meminta dilihat darigetView()
metode Andaadapter
yaituyourActivity
CATATAN:
parent
adalah GroupView itusumber
getView()
metode ..... jadi kami mendapatkan konteks GroupView itu, dan memeriksanya melalui kondisi di atasDi Kotlin sekarang ada cara yang lebih bersih dengan menggunakan fungsi lambda, tidak perlu antarmuka:
sumber