액티비티 Intent1에서 버튼을 누르면 액티비티 Intent2로 전환되는 것을 구현
요청 만들기
Intent(this@현재Activity명, 이동 대상 Activity명::java.class)
package com.example.myapplication
import android.content.Intent
import android.os.Bundle
import android.widget.Button
import androidx.appcompat.app.AppCompatActivity
class Intent1 : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_intent)
val button:Button = findViewById(R.id.change_activity)
button.setOnClickListener {
// 요청을 만듦
val intent = Intent(this@Intent1, Intent2::class.java)
// 요청을 전달
startActivity(intent)
}
}
}
정보 담기 (Intent1에서)
intent.putExtra(NAME, VALUE)
정보 꺼내기 (Intent2에서)
- NullSafety를 위해 디폴트값을 같이 넣어주는 거 잊지 말자.
// 자료형을 명시해줘야 한다. intent.getIntExtra(NAME, DEFAULT_VALUE) intent.getStringExtra(NAME, DEFAULT_VALUE)
package com.example.myapplication
import android.content.Intent
import android.os.Bundle
import android.widget.Button
import androidx.appcompat.app.AppCompatActivity
class Intent1 : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_intent)
val button:Button = findViewById(R.id.change_activity)
button.setOnClickListener {
val intent = Intent(this@Intent1, Intent2::class.java)
// Intent에 정보 담아 보내기
// Key, Value 방식 -> Key와 Value를 쌍으로 만들어 저장한다. -> Dictionary
intent.putExtra("number1", 1)
intent.putExtra("number2", 2)
startActivity(intent)
}
}
}
package com.example.myapplication
import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
class Intent2 : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_intent2)
val number1 = intent.getIntExtra("number1",0)
val number2 = intent.getIntExtra("number2",0)
}
}
더 가독성 높은 코드
- apply를 사용해서 intent에서 어떤 작업을 했는지 한눈에 알아볼 수 있게 한다.
val intent = Intent(this@Intent1, Intent2::class.java) intent.apply { this.putExtra("number1", 1) this.putExtra("number2", 2) } startActivity(intent)
Activity 끼리 정보를 주고받는 경우
요청을 보내는 Activity에서는 startActivity(intent)대신
startActivityForResult(intent, 요청코드)
- 여기서 요청코드는 여러 요청들중 하나를 구분하기 위해 사용
응답을 보내는 Activity에서 응답 설정하기
setResult(결과코드, 응답정보 인텐트)
- 여기서 결과코드는 Activity 클래스에 선언되어있는 상수값이다.
- RESULT_OK :수행한 작업이 성공적일때 일반적으로 쓰는 코드
- RESULT_CANCELED : 수행한 작업이 실패일때 일반적으로 쓰는 코드응답을 보내는 Activity에서 응답 받기
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) }
- 응답이 도착하면 자동으로 호출되는 함수이다.
- 응답 정보를 처리하는 코드를 이 함수 안에 작성하면 된다.
package com.example.myapplication
import android.content.Intent
import android.os.Bundle
import android.util.Log
import android.widget.Button
import androidx.appcompat.app.AppCompatActivity
class Intent1 : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_intent)
val button:Button = findViewById(R.id.change_activity)
button.setOnClickListener {
val intent = Intent(this@Intent1, Intent2::class.java)
intent.apply {
this.putExtra("number1", 1)
this.putExtra("number2", 2)
}
// 결과값을 받아야 하는 요청
startActivityForResult(intent, 200)
}
}
// 결과값이 도착하면 자동으로 호출되는 함수
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
// 내가 보낸 요청이 맞는지 확인하는 과정
if(requestCode == 200){
Log.d("number",""+requestCode)
Log.d("number",""+resultCode)
// 응답 정보 확인하기
val result = data?.getIntExtra("result",0)
Log.d("number",""+result)
}
super.onActivityResult(requestCode, resultCode, data)
}
}
package com.example.myapplication
import android.app.Activity
import android.content.Intent
import android.os.Bundle
import android.util.Log
import android.widget.Button
import androidx.appcompat.app.AppCompatActivity
class Intent2 : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_intent2)
val button: Button = findViewById(R.id.result)
button.setOnClickListener {
val number1 = intent.getIntExtra("number1", 0)
val number2 = intent.getIntExtra("number2",0)
// 인텐트로 전달받은 정보들 처리
val result = number1 + number2
// 인텐트 새로 생성
val resultIntent = Intent()
// 인텐트에 응답 정보 넣기
resultIntent.putExtra("result", result)
// 결과를 설정해줌
setResult(Activity.RESULT_OK, resultIntent)
// 액티비티 종료
// 동시에 결과를 보냄
finish()
}
}
}
Intent(액션, Uri.parse("열고싶은 페이지 url"))
package com.example.myapplication
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.widget.Button
import androidx.appcompat.app.AppCompatActivity
class Intent1 : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_intent)
val button:Button = findViewById(R.id.change_activity)
button.setOnClickListener {
// 특정한 인터넷 페이지를 열도록
val intent = Intent(Intent.ACTION_VIEW, Uri.parse("http://m.naver.com"))
startActivity(intent)
}
}
}