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()
        }
    }
}

 

 [ 최종 결과 ] 

MainActivity, SubActivity 화면
switch 버튼 클릭했을 때 모습

앱 부연 설명 :

 

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

BELATED ARTICLES

more