Intent 예제
2021. 8. 10. 10:14
728x90
최종 구현 화면과 설명은 포스트 맨 아래에 있습니다!
*주의 : build.gradle > plugin에 이걸 추가해야 함 id 'kotlin-android-extensions'
[ activity_main.xml ]
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/tv_sendMSG"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
android:textColor="#673AB7"
android:textSize="25sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHorizontal_bias="0.492"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.713" />
<Button
android:id="@+id/btn_sub"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/btn_a"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.855" />
<ImageView
android:id="@+id/iv_profile"
android:layout_width="150dp"
android:layout_height="150dp"
app:layout_constraintBottom_toTopOf="@+id/tv_sendMSG"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/android" />
<Button
android:id="@+id/btn_toast"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="Toast"
app:layout_constraintBottom_toTopOf="@+id/tv_sendMSG"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/iv_profile"
app:layout_constraintVertical_bias="0.651" />
<Switch
android:id="@+id/btn_switch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toTopOf="@+id/btn_toast"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/iv_profile" />
</androidx.constraintlayout.widget.ConstraintLayout>
[ MainActivity.kt ]
package com.example.intentkt
import android.content.Intent
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.example.intentkt.databinding.ActivityMainBinding
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
// 전역 변수로 바인딩 객체 선언
private lateinit var mBinding: ActivityMainBinding
//매번 null 체크를 할 필요 없이 편의성을 위해 바인딩 변수 재선언
private val binding get() = mBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// 자동 생성된 뷰 바인딩 클래스에서의 inflate 메서드를 활용해서
// 액티비티에서 사용할 바인딩 클래스의 인스턴스 생성
mBinding = ActivityMainBinding.inflate(layoutInflater)
// getRoot 메서드로 레이아웃 내부의 최상위 위치 뷰의
// 인스턴스를 활용하여 생성된 뷰를 액티비티에 표시 합니다.
setContentView(binding.root)
// 이제부터 binding 바인딩 변수를 활용하여 마음 껏 xml 파일 내의 뷰 id 접근이 가능해집니다.
binding.btnSub.setOnClickListener{
val intent = Intent(this, SubActivity::class.java) // intent 객체 생성
intent.putExtra("msg", binding.tvSendMSG.text.toString()) // HelloWorld 라는 문자열을 담은 뒤 msg 라는 키로 잠금
startActivity(intent) // intent에 저장되어 있는 액티비티(SubActivity)로 이동
//finish() // finish() 사용 시, SubActivity로 이동하면서 MainActivity가 파괴되어 다시 켜지지 않음
}
btn_toast.setOnClickListener{
iv_profile.setImageResource(R.drawable.android2) //이미지 뷰에 새로운 이미지 등록
Toast.makeText(this@MainActivity, "버튼이 클릭 되었습니다.", Toast.LENGTH_SHORT).show()
}
btn_switch.setOnCheckedChangeListener{ _, isChecked ->
if(isChecked){
iv_profile.setImageResource(R.drawable.android2)
} else{
iv_profile.setImageResource(R.drawable.android)
}
}
}
}
[ activity_sub.xml ]
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".SubActivity">
<TextView
android:id="@+id/tv_getMSG"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/text01"
android:textColor="#673AB7"
android:textSize="34sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/btnClose"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Go Back"
android:layout_marginBottom="20dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
[ SubActivity.kt ]
package com.example.intentkt
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Toast
import kotlinx.android.synthetic.main.activity_sub.*
class SubActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_sub)
if(intent.hasExtra("msg")){ //msg key가 옳은 값을 가지고 있는지 null check
tv_getMSG.text = intent.getStringExtra("msg") //서브 액티비티의 존재하는 텍스트에 HelloWorld가 넘겨져 옴.
}else{
Toast.makeText(this, "No Available", Toast.LENGTH_SHORT).show()
}
btnClose.setOnClickListener{
finish()
}
}
}
[ 최종 결과 ]
앱 부연 설명 :
1. MainActivity.kt
- switch 버튼을 클릭하면 2번째 사진처럼 검흰 안드로이드 이미지로 바뀐다.
- TOAST 버튼을 클릭하면 "버튼이 클릭 되었습니다" 라는 토스트 메세지가 출력된다.
- 서브 화면으로 이동 버튼을 클릭하면 MainActivity화면의 "Hello World!" 메세지가 SubActivity.kt로 전달되어서 SubActivity 화면에 출력된다.
2. SubActivity.kt
- GO BACK 버튼을 클릭하면 다시 MainActivity 화면으로 돌아간다.
[ 참고 자료 ]
- 안드로이드 이미지 : https://www.flaticon.com/free-icon/android_160138?term=android&related_id=160138
- 홍드로이드 강의 : https://www.youtube.com/watch?v=oXIeBhV06-Y
728x90
'Android Studio > Kotlin' 카테고리의 다른 글
[Kotlin] KakaoLogin KeyHash 발급 (0) | 2021.08.27 |
---|---|
[Kotlin][Firebase] Kakao Login 구현 #3 (6) | 2021.08.24 |
[Kotlin][Firebase] Kakao Login 구현 #2 (1) | 2021.08.24 |
[Kotlin][Firebase] Kakao Login 구현 #1 (0) | 2021.08.23 |
Singleton (0) | 2021.08.05 |