이곳저곳 관심이 많아요
10. Intent : 기초 본문
- MainActivity에서 Intent 호출하기
- 인텐트 객체 생성해서 변수에 넣는다.
- startActivity 함수에 방금 생성한 변수를 넣는다.
//(현재 액티비티, 새로 띄워줄 액티비티)
var i = Intent(this,SubActivity::class.java)
startActivity(i)
- 인텐트에 값을 넣어 전달하려면?
- 값 전달하기
- 전달해야 하는 값을 변수에 넣어주고
- 인텐트 객체를 생성해서 변수에 넣는다.
- 생성한 변수에 putExtra라는 메소드를 사용해 전달 값을 전달한다. :
패키지이름 == 앱 패키지 이름.메시지, 전달할값 - startActivity 함수에 인텐트 객체를 넣어준 변수를 넣는다.
- 값 전달하기
var str = editText.text.toString()
//(현재 액티비티, 새로 띄워줄 액티비티)
var i = Intent(this,SubActivity::class.java)
//(패키지명, 전달할 값) 패키지 명은 클래스 바깥에 const val 형으로 선언
i.putExtra(EXTRA_MESSAGE,str)
startActivity(i)
- 컴포넌트 이름을 활용하는 코딩 스타일
(현재 패키지 명, 인텐트를 전달받을 액티비티)
var str = editText.text.toString()
val cname = ComponentName("com.example.myapplication","com.example.myapplication.SubActivity")
var i = Intent()
.apply {
component = cname
putExtra(EXTRA_MESSAGE,str)
}
startActivity(i)
- 서브엑티비티에서 값 받기
- getStringExtra로 값 받아오기
- SubActivity를 닫기 위해서는 finish() 함수 필요
var msg:String? = intent.getStringExtra(EXTRA_MESSAGE)
- Elvis연산 사용 (이땐 컴포넌트 이름 스타일로 하면 안됨)
val editText:EditText = findViewById(R.id.editText)
//bundle 타입은 null safety 필수
var extras:Bundle? = intent.extras
//Elvis 연산 사용 -> intent.extras 자체에서 null 값을 가질 수도 있다고 작성
/* Elvis 연산이 의미하는 뜻은 아래와 같다.
var extrasElvisMean:Bundle? = null
if (intent == null || intent.extras == null)
extrasElvisMean = null
*/
//이게 더 안정적인 코드
var extras2= intent.extras ?: null
if(intent.hasExtra(EXTRA_MESSAGE)){
var msg:String? = extras2?.getString(EXTRA_MESSAGE)
editText.setText("수신 메시지는 $msg")
}
Comments