안드로이드 앱 개발 공부/자꾸 까먹어서 적어두는 구현방법

[안드로이드] intent를 사용한 Activity 전환 Kotlin 코틀린

플래시🦥 2023. 8. 6.
반응형

intent는 컴포넌트를 호출하거나 데이터를 담아서 보내는 메시징 객체이다. 

1. activity 호출

intent를 사용하여 activity 전환하는 방법 아주 간단한다. 

 

우선, 기본 activity와 이동할 activity가 있다는 전재하에 아래 코드면 끝난다.

val intent = Intent(this, theotherActivity::class.java)
startActivity(intent)

* 만약 이 과정에서 오류가 발생한다면 manifest에 activity가 선언되어 있지 않은지 확인해 보자.

 

2. 데이터 담아서 보내기 

만약 기존 activity에서 다음 activity에 데이터를 보내고 싶다면 

intent.putExtra("transResult",true)

이런 식으로 activity를 시작하기 전에 코드를 추가해 주면 된다. 

위 코드는 boolean데이터를 전달하는 코드이고 이를 응용해서 키-값 쌍으로 보내주면 된다. 

transResult가 키이고 true가 값이다. 

 

이렇게 데이터를 보내주면 상대 activity에서 데이터를 받아야 한다. 

데이터를 보낼 때는 동일한 형태의intent.putExtra(키, 값)으로 어떤 데이터 타입도 보낼 수 있지만 

받을 때는 그냥 getExtra로 사용하는 게 아니라intent.get데이터타입 Extra(키)이다. 

val res = intent.getBooleanExtra("transResult",false)

 

나는 데이터를 보낼 때 Boolean타입의 데이터를 담아서 보냈기 때문에 getBoolaenExtra를 사용했다. 

키 옆에 있는 false값은 DefaultValue이다. 데이터를 받아오지 못했을 때 사용되는 기본값이다. 기본값을 지정해 줘야 하는 것도 있고 아닌 것도 있다. 

intent.get만 작성해도 아래 추천 메서드가 왕창 뜬다. 필요한 거 선택해서 사용하면 된다. 

 

그리고 이동한 activity를 종료하고 싶다면 finish() 사용하면 된다. 

 

 

3. 전체 정리 

<기준 액티비티 >

class MainActivity : AppCompatActivity() {

    val binding by lazy { ActivityMainBinding.inflate(layoutInflater)}
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(binding.root)

        binding.languageButton.setOnClickListener {
        	val intent = Intent(this, LanguagesActivity::class.java)
            intent.putExtra("transResult",true)
            startActivity(intent)
        }

    }

}

 

<이동할 Activity>

class LanguagesActivity : AppCompatActivity() {

    val binding by lazy { ActivityLanguagesBinding.inflate(layoutInflater)}

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

        val res = intent.getBooleanExtra("transResult",false)
        binding.resTextview.text= res.toString()
        binding.finishButton.setOnClickListener { finish() }
    }
}

 

적절하게 필요한 방식으로 응용하면 된다.

728x90
반응형

댓글