0101011001010111

Android 입문 (복습) intent 본문

Kotlin/[스스로]Kotlin&안드로이드

Android 입문 (복습) intent

[진주] 2023. 9. 4. 09:03
728x90
반응형

이전 intent 글 :

 

https://vjinjoov.tistory.com/62

 

Android4-2_ Intent란 ? Explicit Intent와 Implicit Intent

Intent 인텐트(Intent)는 일종의 메시지 객체입니다. 이것을 사용해 다른 앱 구성요소(액티비티, 서비스, 브로드 캐스트리시버)로 작업을 요청 할수 있습니다. 예 ) 저번시간에 first Activity와 Second Acti

vjinjoov.tistory.com

https://vjinjoov.tistory.com/63

 

Android4-2_ Intent란? Intent의 객체 / 명시적 인텐트 Explicit Intent 연습해보기

3.51초- Intent의 객체 Intent객체에는 안드로이드 시스템이 어떤 구성요소를 시작할지 판별하는데 필요한 정보가담겨있습니다. 1). 컴포넌트이름(ComponentName) 인텐트를 처리하는 타켓 컴포넌트 이름

vjinjoov.tistory.com

https://vjinjoov.tistory.com/64

 

Android4-2_ Intent란? Implicit Intent 암시적 인텐트

11분 11초-14분 50초 암시적 인텐트 Implicit Intent 암시적 인텐트로 다른 액티비티를 시작시키기 위해서는 인텐트 안에 작업과 데이터를 지정해야한다. 예를들어 114번호로 다이얼 작업을 수행할 수

vjinjoov.tistory.com

https://vjinjoov.tistory.com/65

 

[질문]Android4-2_ Intent란? Implicit Intent 암시적 인텐트 수신(인텐트 필터)

14분 50초~ 수신 : 받는거!! 잖아욤!! 이제 암시적 인텐트 수신방법을 알아보겠습니다. 매니페스트에서 (AndroidManifest.xml) 속성값이 SecondActivity인 요소 하위에 다음과 같은 태그를 추가한다. android:nam

vjinjoov.tistory.com

https://vjinjoov.tistory.com/66

 

[질문]Android4-2_ Intent란? 액티비티간의 데이터 전달

01.❓데이터 전달은 어떻게 될까? 인텐트에 컴포넌트 실행을 요청할 때 데이터를 함께 전달하려면 엑스트라 데이터를 이용. 엑스트라 데이터는 인텐트에 담는 부가 정보라 할 수 있습니다. Extras

vjinjoov.tistory.com


요즘 intent가 자꾸 정보를 넘겨주는 것? 

이라고 혼동이 와서 헷갈렸다.

 

일단 정확한 개념은 다른 페이지로 정보를 넘겨주는 것만이 아니라 호출 개념이 강하다.

a - > b로 이동한다면,

a에서 b를 호출하는 것이 intent의 개념이다.

 

그것은 명시적 인텐트와 암시적 인텐트 2개로 나누어져 있는데,

 

명시적 인텐트는 정확히 페이지B! 라고 말하는 것이고

암시적 인텐트는 지도 관련 앱을 틀고 싶어~ 라고 하면 지도관련 앱을 찾아서 사용자가 선택하게 하는 기능이다.

그래서 앱을 만들고 출시할때 이 앱은 어떤 기능을 가진 앱이다 filter를 걸어두면 

만약 지도관련된 앱을 연결할거야~ 

하면 구글지도, 네이버 지도등이 

이미 filter로 "지도"라는 것으로 분류된다 라고 앱을 만들 때 설정해 놓았기 때문에

지도 앱 뭐킬래 ? 하고 묻는 선택 항목에 포함되게 된다.

 

 


인텐트에는 다른 페이지로 정보를 넘겨 주는 방법도 가능한데, 

 

 

예를들어, 내가 이메일 온 것에 답장을 누르면

 

이메일 제목이 : 황진주님 안녕하세요

 

였다면 이 것에 대한 답장 을 누를경우

 

제목 : [re]황진주님 안녕하세요.

 

라고 그 전의 데이터를 받아와서 앞에 [re]를 붙이는 형식으로 정보가 넘겨지는 것이다. + 답장을 보낼 이메일 주소도 함께 넘어온다.

 

 

그럴 때, 데이터를 넘길 때 extra 값을 쓰게 된다.

 


 먼저, 액티비티간의 이동을 할 수 있는 방법을 해보자.

 

First, Scond, Third 액티비티를 새로 만들고( 각각의 xml도 같이 생성해주자)

그리고 first에서 second로 연결해주는 연습을 해보자.

먼저 전에 해봤던 것이므로, 강의를 중지 시켜놓고 스스로 해보도록 하자.

 

 


 

내문제점 : 

 

xml로 페이지는 다 만들었으나, 

.kt 파일로 가서 무엇 부터 건드려야 할지 감이 잡히지 않음.

 

먼저, 변수를 지정해주고 

val button = 레이아웃 xml의 버튼이다! 라고 지정해준 뒤,

클릭했을 때, onclick리스너? 같은걸로 페이지 2로 이동한다 라고 설정해 주면 될 것 같은 느낌인데

 

선명하게 순서가 머릿속에 잡히질 않으니 차근차근 해보도록하자.

 

 

android:id="@+id/firstbutton_gosecond"

▼ 레이아웃 버튼 이름은 위와 같은데.. 

 

어떻게 가져오지 ? 

 

 

먼저 순서가 틀린 감이 있다. 

앞으로 나는 뷰바인더를 사용 할 것이므로 뷰바인더 설정부터 해주어야한다. 

 

 

순서 1 : 뷰바인더 설정하기! 

https://vjinjoov.tistory.com/100

 

그리고 난 뒤, 뷰바인터를 통한 버튼의 변수를 설정해주자.

 

package com.example.test

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.example.test.databinding.ActivityFirstBinding

class FirstActivity : AppCompatActivity() {

    private lateinit var binding: ActivityFirstBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        binding = ActivityFirstBinding.inflate(layoutInflater)
        setContentView(binding.root)

        setContentView(R.layout.activity_first)


        //뷰바인더를 설정했다면, 뷰바인더를 이용한 변수설정
        val button = binding.firstbuttonGosecond
    }
}
android:id="@+id/firstbutton_gosecond"

버튼의 xml 상 이름을 camelCase로 바꿔주면 된다.

 

 

그럼, 이제 이 버튼을 눌렀을 때!

세컨드 페이지로 간다고 설정을 해 줘야한다.

 

방법은 2가지가 있다.

 

먼저 바로 리스너를 설정하는 방법과, 변수를 설정하고 그것을 이어주는 방법이 있는데

먼저 버튼의 이름을 따로 .kt 에 설정해주지 않고

xml의 이름으로 바로 연결해주는 방법!

 

        binding.firstbuttonGosecond.setOnClickListener {
            val intent = Intent(this@FirstActivity, SecondActivity::class.java)
            startActivity(intent)
        }

 

 

            val intent = Intent(this@FirstActivity, SecondActivity::class.java)

 

 

 

startActivity()는 그저 액티비티를 시작하는 것뿐만 아니라, 웹 브라우저를 열거나, 사진을 찍기 위한 카메라 앱을 시작하거나, 전화를 걸기 위한 다이얼러 앱을 시작하는 등의 작업도 수행할 수 있습니다. 이 모든 것은 Intent에 어떤 정보가 담겨 있느냐에 따라 결정됩니다.


+추가공부 ) @는 무엇일까 ? 

https://vjinjoov.tistory.com/manage/posts/


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형