intent1.xml 과 intent2.xml 모두 버튼 하나 밖에 없으므로
따로 xml코드는 적지 않겠음.
class Intent1 : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_intent1)
var button1: Button = findViewById(R.id.change_activity) //뷰바인딩을 이용해도됩니다.
//intent만들기
var intent = Intent(this@Intent1, Intent2::class.java)
//버튼을 클릭 했을 때 intent에게 정보가 전달되도록 합니다.
button1.setOnClickListener(View.OnClickListener {
//key,value방식
//값을 포함해서 전달하는 방법1 - 전달만 하는 intent
intent.putExtra("number1",1)
intent.putExtra("number2",2)
startActivity(intent)
//값을 포함해서 전달하는 방법2 - 전달만 하는 intent
//apply를 이용하면 intent에 담기는 정보가 {} 안에 있기 때문에 한눈에 알아보기 쉽다.
intent2.apply {
this.putExtra("number1", 1)
this.putExtra("number2", 2)
}
startActivity(intent)
})
}
}
class Intent2 : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_intent2)
//값을 가져오는 방법
val resultButton: Button = findViewById(R.id.result) //뷰바인딩 이용해도 됩니다.
//버튼을 눌렀을 때 결과 값을 받습니다.
//가져올때는 변수타입이 지정된 함수이름을 써야합니다.
//키값이 없을 때를 대비하여 default값도 지정해줘야함
resultButton.setOnClickListener(View.OnClickListener {
//보내진 결과 값 받기
var number1 = intent.getIntExtra("number1", 0)
var number2 = intent.getIntExtra("number2", 0)
Log.d("getExtra", "" + number1)
Log.d("getExtra", "" + number2)
})
}
}
app수준 gradle에서
implementation "androidx.activity:activity:1.3.0-rc01"
implementation "androidx.fragment:fragment:1.4.0-alpha04"
를 import해줍니다. 최신버전은 알아서 찾으세요.
class Intent1 : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_intent1)
var button1: Button = findViewById(R.id.change_activity) //뷰바인딩을 사용해도 됩니다.
//요청을 하는 intent - starActivityForResult deprecated
//requestCode는 이제 사용하지 x
//명시적 intent - 누구에게 뭘 해줘 라고 명시적으로 명령
//intent1이 intent2에게 명시적으로 명령
val intent = Intent(this@Intent1, Intent2::class.java)
// launcher 선언 - 솔직히 뭔지 잘 모르겠읍니다.
val launcher: ActivityResultLauncher<Intent> = registerForActivityResult(
StartActivityForResult()
) { result: ActivityResult ->
if (result.resultCode == RESULT_OK) {
val data = result.data
// RESULT_OK일 때 실행할 코드
val mString = result.data?.getIntExtra("result", 100)
Log.d("number", "받아온 결과값" + mString)
//intent2에서 result에 3을 넣어서 반환했기 때문에
//mstring에 3이 들어있을 거임.
}
}
button1.setOnClickListener(View.OnClickListener {
// launcher를 이용해서 화면 시작하기
//intent에 담고싶은 정보를 넣어준다.
//apply를 이용하면 intent에 담기는 정보가 {} 안에 있기 때문에 한눈에 알아보기 쉽다.
intent2.apply {
this.putExtra("number1", 1)
this.putExtra("number2", 2)
}
launcher.launch(intent)
})
}
}
class Intent2 : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_intent2)
val resultButton: Button = findViewById(R.id.result)
//값을 가져오는 방법
//가져올때는 변수타입이 지정된 함수이름을 써줘야한다. ex)getIntExtra, getStringExtra
//키값이 없을 때를 대비하여 default값도 지정해줘야함
resultButton.setOnClickListener(View.OnClickListener {
//보내진 결과 값 받기
var number1 = intent.getIntExtra("number1", 0)
var number2 = intent.getIntExtra("number2", 0)
Log.d("getExtra", "" + number1)
Log.d("getExtra", "" + number2)
//처리해서 다시 인텐트에게 정보? 주기
val result = number1 + number2
val resultIntent = Intent()
resultIntent.putExtra("result", result)
setResult(Activity.RESULT_OK, resultIntent)
finish() //액티비티 종료 - activity가 stack처럼 쌓이기때문에 finish하면 intent1만 남음
})
}
}
class Intent1 : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_intent1)
var button1: Button = findViewById(R.id.change_activity) //뷰바인딩을 사용해도 됩니다.
// 암시적 intent - ex) url를 보여줘라 라는 인텐트
// 할 수 있는 대상에게 암시적으로 요청 (브라우저가 여러개 있으면 브라우저 종류가 나오고, 사용자가 고른다.
// 공유하기를 눌렀을 때 카톡,인스타,페북 으로 공유하기 등이 나오는 것을 떠올리면 됨.
// 그렇기 때문에 명령대상이 명확한게 아니라 할 수 있는 대상에게 모두 보내는 것이므로 대상이 암시적임)
val intent3 = Intent(Intent.ACTION_VIEW, Uri.parse("<http://m.naver.com>"))
button1.setOnClickListener(View.OnClickListener {
startActivity(intent3)
})
}