GDSC HUFS 3기/Android with Kotlin Team 4

[4팀]14-1. 화면 구성하기:액티비티 값 주고받기, 뷰바인딩

gusals42 2021. 11. 8. 04:32

이 글은 이것이 안드로이드다 with 코틀린(개정판)를 참고하여 작성하였습니다.

작성자 : 정현민

개발환경은 Windows, Android Studio입니다. 

 

 

1. Entry Point

Android는 manifest 폴더에 시작점(entry point)를 가진다. 

프로젝트 시작 -> main activity tag 생성->intent filter로 action.Main이 지정됨(=Android의 entry point)

activity 중에서도 onCreate가 시작점이 된다.

-Activity Name

-Generate a Layout File ✔-xml 파일 형성

-Launcher activity ✔- Main Activity의 entry point로 설정

2. 액티비티값 주고받기

1) MainActivity to SubActivity로의 화면전환 기능(Intent)

val binding by lazy {ActivityMainBinding.inflate(LayoutInflater)}

-binding을 만들어주기 위한 코드

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

-setOnClickListener 아래에서 작성

 

2) MainActivity to SubActivity로의 값 전달 기능

//MainActivity
intent.putExtra(name:"from1", value: "Hello Bundle")
intent.putExtra(name:"from2", value: 2021)

//SubActivity
with(binding) {this:ActivitySubBinding
	to1.text = intent.getStringExtra(name:"from1")
	to2.text = ${intent.getIntExtra(name:"from2", defaultValue:0)}
}

(전달해야할 value가 여러 개인 경우, binding을 with로 묶는 것이 나음)

✔입력할 땐(putExtra), type을 지정하지 않아도 되지만, 출력할 땐(getExtra), type을 지정해야 함.

✔Int type은 Value값이 정해져 있지 않을 때를 대비해, defaultValue:0을 지정해줘야 함

 

3) SubActivity를 종료+MainActivity에 값 되돌리는 기능

//MainActivity
startActivityForResult(intent, requestcode:99)

-SubActivity를 호출하는 코드

✔startActivityForResult는 intent와 requestcode를 가진다.

✔requestcode: 버튼이나 액티비티가 여러 개일 때, 구별을 위해 넣어주는 값

//SubActivity
btnClose.setOnClickListener{it:View!
	val returnIntent = Intent()
	val message = editMessage.text.toString()
	returnIntent.putExtra(name:"returnValue",message)
	setResult(Activity.RESULT_OK, returnIntent)
	finish()
}

-btnClose가 click됐을 때, 종료하는 코드

✔빈 intent 생성 ->값을 담아서 returnIntent

✔완성된 intent를 setResult 코드에 담고 RESULT_OK를 통해 정상적으로 종료됐음을 MainActivity측에 전달

 

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?){
	super.onActivityResult(requestCode, resultCode, data)
    
    if(resultCode==Activity.RESULT_OK){
    	when(requestCode) {
        	99->{
            	data?.getstringExtra(name: "returnValue")?.let(message ->
                Toast.makeText(context this, message, Toast.LENGTH_SHORT).show()
                }
            }
    }
}

-SubActivity에서 finish()이후 MainActivity로 넘어와 onActivityResult를 호출하는 코드

✔message를 꺼내기 위해 returnValue 사용

✔let을 사용하여 returnValue값이 있을 때만 message 꺼냄

✔requestCode가 하나만 있을 경우, if 사용가능