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하지만 여전히 캐스팅 this에 MainActivity? 아마도 하위 클래스에서?
— 마크 플라 노 - 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.