Study Record

[안드로이드] Activity 시작하기 본문

안드로이드

[안드로이드] Activity 시작하기

초코초코초코 2023. 7. 20. 16:34
728x90

😶 Activity 시작하기

Android 에서 새로운 Activity 를 시작하려면 startActivity 함수를 사용한다. 이 함수에는 Intent 를 매개 변수로 받는데 Intent 에는 새로 시작할 Activity 에 대한 정보와 따로 전달할 데이터를 포함한다.

val intent = Intent(context, DetailActivity::class.java).apply {
    putExtra("INTENT_DATA_STR", "test value"),
    putExtra("INTENT_DATA_INT", 4)
}

context.startActivity(intent)

 

 

😶 Activity 에서 데이터 받기

Activity 를 시작할 때 intent 의 putExtra 함수로 데이터를 전달했다. 이 데이터를 해당 Activity 에서 받는 방법은 intent.extras 값으로 타입은 Bundle 로  받을 수 있다.

val valueString = intent.extras?.getString("INTENT_DATA_STR")
val valueInt = intent.extras?.getInt("INTENT_DATA_INT")

 

 

😶 companion object 활용하기

Activity 사이의 데이터 교환시 putExtra() 함수에서 key 값을 하드코딩된 값으로 사용하는 것은 권장하지 않는다. 프로젝트가 커지고 이런 값들이 많아질수록 관리하기 어려워지기 때문이다.

 

여기서 companion object 를 사용하면 클래스의 특정 인스턴스 없이 단일 인스턴스만 존재하게끔 할 수 있다. 따라서 companion object 에 해당 key 값을 정의하고 외부 Activity 에서 엑세스할 수 있도록 한다.

class TestActivity()  : AppCompatActivity() {

    companion object {
        const val DATA_KEY = "DATA_KEY"
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        val data = intent.extras?.getString(DATA_KEY) ?: "Data"
    }
}

 

Activity 시작하는 코드가 있는 쪽에서는 해당 Activity 에 정의된 key 값을 사용한다.

class MainActivity()  : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        /* */
    }
    
    fun startTestActivity() {
        val intent = Intent(context, DetailActivity::class.java).apply {
            putExtra(TestActivity.DATA_KEY, "test value")
        }

        startActivity(intent)
    }
}

 

728x90