Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

이곳저곳 관심이 많아요

10. Intent : 기초 본문

카테고리 없음

10. Intent : 기초

킹수맨 2021. 12. 3. 21:12
  • MainActivity에서 Intent 호출하기
    1. 인텐트 객체 생성해서 변수에 넣는다.
    2. startActivity 함수에 방금 생성한 변수를 넣는다.
//(현재 액티비티, 새로 띄워줄 액티비티)
var i = Intent(this,SubActivity::class.java)
startActivity(i)

 

  • 인텐트에 값을 넣어 전달하려면?
    • 값 전달하기 
      1. 전달해야 하는 값을 변수에 넣어주고
      2. 인텐트 객체를 생성해서 변수에 넣는다.
      3. 생성한 변수에 putExtra라는 메소드를 사용해 전달 값을 전달한다. :
        패키지이름 == 앱 패키지 이름.메시지, 전달할값
      4. 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)
  • 서브엑티비티에서 값 받기
    1. getStringExtra로 값 받아오기
    2. 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