Kotlin에서 'Activity.this'에 액세스하는 방법은 무엇입니까?


128

이 Java 코드가 있습니다.

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

Kotlin에서 MainActivity 개체를 얻고 싶습니다. 자동 변환이에서 중단됩니다 MainActivity.this.


어쩌면 this as MainActivity?
Marc Plano-Lesay

1
이 코드가 내부 MainActivity에 없으면의 어떤 인스턴스에 MainActivity연결됩니까 (그리고 어떻게)? 어떤 인스턴스로 액세스 this하시겠습니까?
핫키

작동하는 Java 코드는 activity.this를 참조하므로 정적입니까? 나는 확실하지 않다.
Bal0r

작동하는 Java 코드도 완전히 별도의 파일에 있습니까?
yole

어떻게이 코드는 그렇지 않은 경우에,라고 MainActivity하지만 여전히 캐스팅 thisMainActivity? 아마도 하위 클래스에서?
마크 플라 노 - Lesay

답변:


237

정규화 된MainActivity .NET Framework를 사용하여 Kotlin에서 개체에 대한 참조를 가져올 수 있습니다 . 예 :this

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

1
Fragment는 어떻습니까? 컨텍스트를 Fragment ( @ActivityContext속성 포함)에 주입 했으므로 이제 Activity가 필요합니다. 물론 프래그먼트에서 getActivity()(Kotlin activity)에 대해 알고 있지만 두 번째 방법은 괜찮거나 컨텍스트가 있기 때문에 활동에 액세스하는 데 사용하는 것이 더 낫습니까?
Dr. jacky

@ Dr.jacky 나는 당신이 '(컨텍스트로? 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 로 컨텍스트를 얻습니다.


무엇에 대해이 코멘트를 추가하고 있습니까? 해결 된 참고 자료를 제공 할 수 있습니까? 그것은 우리에게 도움이 될 것입니다. 그래서 우리는 다음에 그것을 따를 것입니다
발라

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에서 "Context"를 정의하려는 경우 사용해야합니다.

var mContext:Context = this@MainActivity

왜? Kotlin 언어에서 @는 다음과 같은 "의"를 의미하기 때문입니다.

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

자세한 내용은 Kotlin 언어 웹 사이트 : This Expression in Kotlin을 참조하세요.

뿡 빵뀨

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.