728x90
intent란 간단히 말하자면 여러 화면(창) 간의 이동을 할 수 있도록 해주는 것입니다.
예를 들어보자면
게임을 하다가 전화가 와서 전화를 받으면 전화 화면으로 바뀌는 상황 (app <-> android system)
주문을 하기위해 결제화면이 뜨는 상황 (app <-> app)
main화면과 sub화면간의 이동을 하는 프로그램을 만들어 intent를 사용하는 예시를 보겠습니다.
우선 main화면에 TextView와 Button을 대강 만들어 배치해줍시다.
MainActivity Xml
main화면을 만들었으니 Sub 화면도 만들어줍시다.
Activity Name을 설정해준 후 finish를 눌러 만들기 완성!
Sub화면에도 대충 텍스트 하나 만들어줍시다.
SubActivity Xml
자! 이제 화면을 만들어주었으니 intent를 사용하러 가봅시다!
MainActivity kt
package com.example.intentex1
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
btn_intent.setOnClickListener{
val intent = Intent(this, SubActivity::class.java) // 인텐트를 생성해줌,
// or val intent = Intent(this@MainActivity, SubActivity::class.java)
//자기자신 클래스의 정보와 띄워줄 화면의 정보를 적어준다.
intent.putExtra("msg", text_main.text.toString())
// (key, value) 전달할 정보가 없다면 이 문장을 사용하지 않아도 됨.
// 전달할 정보가 많다면 더 적어줄 수도 있다.
startActivity(intent) // 화면 전환을 시켜줌
finish() // main 창을 닫아줌. 닫아주지 않고싶다면 이 문장을 사용하지 않아도 됨.
}
}
}
위의 방법이나 아래의 방법을 사용한다.
가독성을 위해 apply를 사용하기도 한다. intent에 어떤 작업을 했는지 한눈에 볼 수 있음.
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
btn_intent.setOnClickListener {
val intent = Intent(this, SubActivity::class.java)
intent.apply {
this.putExtra("msg", text_main.text.toString())
}
startActivity(intent)
}
}
}
SubActivity kt
package com.example.intentex1
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_sub.*
class SubActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_sub)
if(intent.hasExtra("msg")) { //msg라는 키값을 가진 intent가 정보를 가지고 있다면 실행
text_sub.text = intent.getStringExtra("msg")
// text_sub의 문구를 msg라는 키값을 가진 intent의 정보로 바꾸어준다.
}
}
}
만약 메인화면의 버튼을 눌렀을 때 앱이 종료된다면 Menifest에 SubActivity를 추가시켜줄 것..!
+ 암시적 인텐트
앞서 본 것은 명시적으로 인텐트를 하는 방법이었습니다.
아래에 있는 방법은 암시적으로 인텐트를 하는 방법입니다.
btn_intent.setOnClickListener {
val intent = Intent(Intent.ACTION_VIEW, Uri.parse("https://www.naver.com/"))
//ACTION_VIEW = 뒤에 있는 것을 보여주라는 뜻
startActivity(intent)
}
딱 보면 알 수 있듯이 네이버를 띄워줄 수 있습니다만 명시적과 암시적 인텐트는 어떤 차이가 있는걸까요?
- 명시적 인텐트는 정확한 대상에게 요청한다.
- 암시적 인텐트는 작업을 할 수 있는 대상 모두에게 요청한다.
(링크 클릭시, 링크를 열 수 있는 앱이 많은 경우. 크롬, 웨일, 인스타 등에게 요청)
ex. 갤러리에서 사진을 골라 공유를 한다면 카톡, 문자, 이메일 등에서 선택하는 것처럼 대상이 여럿 있을 수 있는 것들.
728x90
'안드로이드' 카테고리의 다른 글
[android] [kotlin] Fragment 사용하기 (1) | 2020.12.31 |
---|---|
[android] [kotlin] Splash 사용하기 (0) | 2020.12.31 |
[android] [kotlin] toast 메시지 사용하기 (0) | 2020.12.30 |
[android] [kotlin] ListView와 CardView사용하기 (0) | 2020.12.29 |
[android] [xml] 뷰 가운데 정렬하기 (0) | 2020.12.22 |
댓글