Intent

tpids·2024년 8월 22일

Android

목록 보기
27/29

MainActvity2.kt

package com.example.ex_intent

import android.app.Activity
import android.content.Intent
import android.os.Bundle
import android.util.Log
import android.widget.Button
import android.widget.EditText
import android.widget.Toast
import androidx.activity.enableEdgeToEdge
import androidx.activity.result.ActivityResult
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat

class MainActivity2 : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main2)

        // 이동 버튼이 클릭이되면 액티비티(sub) 전환 + 입력한 값
        val btnMove2 : Button = findViewById<Button>(R.id.btnMove2)
        val etInput2 : EditText = findViewById<EditText>(R.id.etInput2)

        btnMove2.setOnClickListener {
            // 입력한 값 가져오기
            val input = etInput2.text.toString()
            
            // intent 생성
            val intent: Intent = Intent(this,subActivity2::class.java)
            intent.putExtra("data",input)

            // FLAG 설정 (생략)

            // intent에 데이터 추가
            // intent.putExtra("data",input)
            // intent.putExtra("data2",100)

            // intent 활용 액티비티 전환
            // startActivity(intent)


            // 단방향으로 실행 (main -> sub, 따로 결과값은 받아 올수가 없음)
            // startActivity(intent)
            // => 화면 간의 이동은 필요하지만 새로운 액티비티로부터 결과를 받지 않을 때 사용
            
            // 양방향
            // startActivityForResult()
            // => 새로운 액티비티를 시작하면서 해당 액티비티로부터 결과를 받아와야 할 때 사용
            // ex) 카메라 액티비티를 새롭게 시작한 후 촬영한 사진의 경로를 받아와야 할때!
            // => 권장하고 있지 않음 => registerForActivityResult 구현해서 사용!
            mainLauncher.launch(intent)
        }
    }

    // registerForActivityResult 구현 위치
    val mainLauncher = registerForActivityResult(
        ActivityResultContracts.StartActivityForResult()){

        result: ActivityResult ->

        Log.d("result", result.resultCode.toString())
        if(result.resultCode == Activity.RESULT_OK) {
            Toast.makeText(this,"성공!", Toast.LENGTH_SHORT).show()
        }
    }
}

subActivity.kt

package com.example.ex_intent

import android.content.Intent
import android.os.Bundle
import android.widget.Button
import android.widget.TextView
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat

class subActivity2 : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_sub2)

        val tvInput:TextView = findViewById<TextView>(R.id.tvInput2)
        val btnMain:Button = findViewById<Button>(R.id.btnMain)

        // MainActivity에서 사용한 intent 가져오기
        val intent: Intent = getIntent()

        val result = intent.getStringExtra("data")

        tvInput.text = result

        btnMain.setOnClickListener {
            // 버튼이 클릭되면 결과값을 가지고 메인으로 돌아가기!

            // 카메라 앱(SUB 액티비티)이 실행되었다고 가정
            // RESULT_OK : 성공적으로 사진 촬영을 했을 때
            // RESULT_CANCELED : 사용자가 사진 촬용을 하지 않았을 때

            setResult(RESULT_OK, intent)

            finish() // 현재 액티비티를 종류 후 호출한 액티비티로 돌아가기
        }
    }
}

profile
개발자

0개의 댓글