Kotlinで「Activity.this」にアクセスする方法


128

私はこのJavaコードを持っています:

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

KotlinでMainActivityオブジェクトを取得したいのですが。自動変換はで中断しMainActivity.thisます。


たぶんthis as MainActivity
Marc Plano-Lesay 2017年

1
そして、このコードが内MainActivityにない場合、どのインスタンスにMainActivity接続されていますか(そしてどのように)?どのインスタンスとしてアクセスしthisますか?
ホットキー2017年

動作するJavaコードはactivity.thisだけを参照するので、静的なコードですか?わからない
Bal0r 2017年

動作するJavaコードも完全に別のファイルにありますか?
ヨール2017年

このコードが呼び出されてMainActivityいない場合、どのように呼び出さthisMainActivityますか?多分サブクラスで?
Marc Plano-Lesay 2017年

回答:


237

修飾MainActivityされたを使用して、Kotlinでオブジェクトへの参照を取得できます。例えば:this

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

1
フラグメントはどうですか?ContextをFragment(with @ActivityContextattribute)に注入したので、Activityが必要になりました。もちろん、フラグメント内のgetActivity()(Kotlin activity)については知っていますが、2番目の方法は大丈夫ですか、またはコンテキストがあるので、それを使用してアクティビティにアクセスする方が良いですか?
Dr.jacky

@ Dr.jacky '(context as?YourActivity)'キャストを実行できると思います。アクティビティメソッドにアクセスできるようになりました
Gian Gomen

@ siddarth-g未解決の参照で問題が発生している場合は、MCVEで新しい質問を作成してヘルプを受けることをお勧めします。
mfulton26

@ mfulton26これはコンパイルの問題ではありませんthis @ ActivityNameは、別のプロジェクトでも機能しませんでした。
Siddarth G

18

代わりにこのラベルを試してください

this@YourActivityName

1
unresolevd参照
Siddarth G

コンパイルされません
IgorGanapolsky

2
@IgorGanapolskyはActivityNameをあなたのアクティビティ名に変更します-_-
Grecha

1

内部クラスからActivity.thisを呼び出す場合は、クラスの前に内部を置く必要があります

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

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

@Allen正解です。内部クラス内のアクティビティにアクセスするには内部キーワードが必要です
droidev

0

MainActivtiy.thisとしてアクティビティのコンテキストを取得するためにJavaで行うのと同じように、kotlinではthis @ MainActivityとしてコンテキストを取得します


何のためにこのコメントを追加しますか?解決された参照をいくつか提供できますか?それは私たちに役立ちます、それで私たちは次回からそれをフォローするでしょう
のBala

0

getActivity()同等のものはthis@activity_name 、materialDialogのビルダーの場合です。

materialDialog = MaterialDialog.Builder(this)

0

このようにして活動対象を取得できます。

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

0

Kotlinでは、次のように使用する必要があります。

this @ ActivityName

例:MainActivity.ktで「コンテキスト」を定義する場合に使用します。

var mContext:Context = this@MainActivity

どうして?Kotlin言語では、@には次のような「の」という意味があるためです。

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

あなたはより多くの情報を知りたい場合は、Kotlin言語のウェブサイトを見ることができます: Kotlinでこの表現を

@canerkaseler

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.