Bagaimana cara mengakses "Activity.this" di Kotlin?


129

Saya memiliki kode Java ini:

MaterialDialog builder = new MaterialDialog.Builder(MainActivity.this)

Saya ingin mendapatkan objek MainActivity di Kotlin. Konversi otomatis berhenti pada MainActivity.this.


Mungkinkah this as MainActivity?
— Marc Plano-Lesay

1
Dan jika kode ini tidak ada di dalam MainActivity, lalu ke mana MainActivityia terhubung (dan bagaimana)? Contoh mana yang ingin Anda akses this?
— hotkey

Kode Java yang berfungsi hanya mereferensikan activity.this, jadi yang statis? Saya tidak yakin itu.
— Bal0r

Apakah kode Java yang berfungsi juga dalam file yang sepenuhnya terpisah?
— yole

Bagaimana kode ini dipanggil, jika tidak di MainActivitytetapi masih mentransmisikan thiske MainActivity? Mungkin di subclass?
— Marc Plano-Lesay

Jawaban:


238

Anda bisa mendapatkan referensi untuk Anda MainActivityobjek dalam Kotlin dengan menggunakan berkualitasthis . misalnya:

class MyActivity : MainActivity() {
    val builder = MaterialDialog.Builder(this@MyActivity)
}

1
Bagaimana dengan Fragment? Saya telah memasukkan Konteks ke dalam Fragmen (dengan @ActivityContextatribut), sekarang saya membutuhkan Aktivitas. Tentu saja, saya tahu tentang getActivity()(Kotlin activity) di Fragmen, tetapi apakah cara kedua baik-baik saja atau karena saya memiliki Konteks, lebih baik menggunakannya untuk mengakses aktivitas?
— Dr.jacky

@ Dr.jacky Saya pikir Anda dapat melakukan '(konteks sebagai? Aktivitas Anda)'. Sekarang Anda dapat mengakses metode aktivitas Anda
— Gian Gomen

@ siddarth-g jika Anda mengalami masalah dengan referensi yang belum terselesaikan, saya sarankan untuk membuat pertanyaan baru dengan MCVE untuk mendapatkan bantuan.
— mfulton26

@ mfulton26 ini bukan masalah kompilasi @ ActivityName ini tidak berfungsi untuk saya di proyek lain juga.
— Siddarth G

18

Coba label ini sebagai gantinya

this@YourActivityName

1
referensi unresolevd
— Siddarth G

Itu tidak dapat dikompilasi
— IgorGanapolsky

2
@IgorGanapolsky mengubah ActivityName menjadi nama Aktivitas Anda -_-
— Grecha

1

Jika Anda memanggil Activity.this dari kelas dalam, Anda harus meletakkan batin sebelum kelas

class MyActivity : MainActivity() {
    // Call from class itself
    val builder = MaterialDialog.Builder(this@MyActivity) 

    inner class Inner {
        this@MyActivity // Call from the inner class 
    }
}

@ Jika Anda benar, kata kunci dalam diperlukan untuk mengakses Aktivitas di dalam kelas dalam
— droidev

0

Seperti yang Anda lakukan di java untuk mendapatkan konteks aktivitas sebagai MainActivtiy.this, di kotlin Anda akan mendapatkan konteks seperti ini @ MainActivity.


apakah Anda menambahkan komentar ini untuk apa? Bisakah Anda memberikan beberapa referensi yang terselesaikan? Ini akan membantu kami, Sehingga kami akan mengikutinya dari waktu berikutnya
— The Bala

0

getActivity()setara this@activity_name dalam kasus pembangun untuk materialDialog

materialDialog = MaterialDialog.Builder(this)

0

Anda bisa mendapatkan objek aktivitas seperti ini.

class DemoActivity : MainActivity() {
    val builder = MaterialDialog.Builder(this@DemoActivity)
}

0

Di Kotlin, Anda harus menggunakan cara ini:

ini @ ActivityName

Misalnya: Anda harus menggunakannya jika Anda ingin mendefinisikan "Konteks" di MainActivity.kt

var mContext:Context = this@MainActivity

Mengapa? Karena dalam bahasa Kotlin @ memiliki arti "dari" seperti:

val a = this@A // A's this

Jika Anda ingin mempelajari lebih lanjut, Anda dapat melihat situs Bahasa Kotlin: Ekspresi ini di Kotlin

@bayu_joo

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.