03. Intent
- 의도, 요구, 의사 전달, 요청
- Intent 사용처
- Activity와 Activity
- Android System과 내 App (전화, , , 등)
- 다른 App과 내 App -> 무작정 사용할 수 없다, 상호합의가 있어야 한다.
- 요청의 종류
- 전달만 하는 요청
- 리턴을 받는 요청
- 인텐트의 종류
- 명시적 인텐트 -> 정확히 대상에게 요청
- 암시적 인텐트 -> 할수 있는 대상에 요청
- 명시적 인텐트(Intent1 Activity -> Intent2 Activity) + 전달만 하는 요청
// 명시적 인텐트
val intent2 = Intent(this@Intent1,Intent2::class.java)
// Apply -> 묶음?
intent2.apply {
this.putExtra("number1", 1)
this.putExtra("number2", 2)
}
// - 요청의 종류
// - 전달만 하는 요청
startActivity(intent2)
- 같은 방법 이지만 코틀린의 apply를 이용해서 가독성을 높이는 방법
// 명시적 인텐트
val intent2 = Intent(this@Intent1,Intent2::class.java)
// Apply -> 묶음?
intent2.apply {
this.putExtra("number1", 1)
this.putExtra("number2", 2)
}
// - 요청의 종류
// - 전달만 하는 요청
startActivity(intent2)
- 리턴을 받는 요청
// 명시적 인텐트
val intent2 = Intent(this@Intent1,Intent2::class.java)
// Apply -> 묶음?
intent2.apply {
this.putExtra("number1", 1)
this.putExtra("number2", 2)
}
// - 요청의 종류
// - 전달만 하는 요청
//startActivity(intent2)
// - 리턴을 받는 요청
startActivityForResult(intent2, 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)
}
//리턴하기(startActivityForResult(intent2=..., 200)에 대한)
val result = number1 + number2
val resultIntent = Intent()
resultIntent.putExtra("result", result)
setResult(Activity.RESULT_OK, resultIntent)
- 암시적 인텐트
val intent3 = Intent(Intent.ACTION_VIEW, Uri.parse("http://m.naver.com"))
startActivity(intent3)
- 전체 코드(Intent1)
package com.example.myapplication
import android.content.Intent
import android.net.Uri
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import kotlinx.android.synthetic.main.activity_intent.*
import kotlinx.android.synthetic.main.activity_intent2.*
class Intent1 : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_intent)
change_activity.setOnClickListener {
// //this@Intent1에서 @Intent1은 생략해도됨 this가 Intent1을 가르키기 때문.
// //하지만 오류가 나는 경우도 있기 때문에, @뒷부분을 끝까지 써주는게 좋음.
// // 명시적 인텐트
// val intent = Intent(this@Intent1,Intent2::class.java)
//
// // Key, Value 방식 -> Key와 Value를 쌍으로 만들어 저장한다. -> Dictionary
// intent.putExtra("number1", 1)
// intent.putExtra("number2", 2)
// startActivity(intent);
// // 명시적 인텐트
// val intent2 = Intent(this@Intent1,Intent2::class.java)
// // Apply -> 묶음?
// intent2.apply {
// this.putExtra("number1", 1)
// this.putExtra("number2", 2)
// }
// // - 요청의 종류
// // - 전달만 하는 요청
// //startActivity(intent2)
// // - 리턴을 받는 요청
// startActivityForResult(intent2, 200)
// 암시적 인텐트
val intent = Intent(Intent.ACTION_VIEW, Uri.parse("http://m.naver.com"))
startActivity(intent)
}
}
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)
}
}
-전체코드(Intent2)
package com.example.myapplication
import android.app.Activity
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import kotlinx.android.synthetic.main.activity_intent2.*
class Intent2 : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_intent2)
result.setOnClickListener {
//값을 받기
val number1 = intent.getIntExtra("number1",0)
val number2 = intent.getIntExtra("number2",0)
Log.d("number", ""+number1)
Log.d("number", ""+number2)
//리턴하기(startActivityForResult(intent2=..., 200)에 대한)
val result = number1 + number2
val resultIntent = Intent()
resultIntent.putExtra("result", result)
setResult(Activity.RESULT_OK, resultIntent)
finish()// Activity 종료
// Stack
// Intent2 ->종료
// Intent1 Intent1
}
}
}
Context (0) | 2020.11.18 |
---|---|
NullSafety, lateinit (0) | 2020.11.18 |
Fragment (0) | 2020.11.18 |
수명주기, view -> activity, 익명함수 (0) | 2020.11.16 |
layout (0) | 2020.11.13 |
댓글 영역