본문 바로가기

Android App/Basic & Document

[공식문서] 다른 활동 시작

* 해당 글은 안드로이드 디벨로퍼의 공식 문서를 개인적으로 정리하는 용도입니다.

 

다른 활동 시작  |  Android 개발자  |  Android Developers

다른 활동 시작 이전 과정을 완료했다면 텍스트 필드와 Send 버튼이 있는 단일 화면으로 구성된 활동을 보여주는 앱이 있을 것입니다. 이 과정에서는 사용자가 Send 버튼을 탭할 때 메시지를 표시

developer.android.com

Intent 빌드

Intent는 개별 컴포넌트(예: 두개의 Activity) 간의 런타임 바인딩을 제공하는 객체입니다.
어떤 작업을 하려는 앱의 의도를 나타냅니다.
매우 다양한 작업에 사용이 가능합니다.

아래는 Intent를 활용하여 다른 Activity를 시작하는 예제입니다.

const val EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE"

fun sendMessage(view: View) {
	...
    
    val messsage = ...
    val intent = Intent(this, NextActivity::class.java).apply {
        putExtra(EXTRA_MESSAGE, message)
    }
    startActivity(intent)
}

 

sendMessage()에서 이루어지는 작업은 다음과 같습니다.

  • Intent 생성자는 Context와 Class를 사용합니다.
    Activity 클래스는 Context의 서브 클래스이므로 Context 매개변수를 먼저 사용합니다.
    Class 매개변수는 시스템이 Intent를 전송하는 앱 컴포넌트로, 이 경우에는 시작할 Activity가 됩니다.
  • putExtra() 메서드는 Intent에 값을 더합니다. Intent는 extras라 불리는 Key-Value 페어로 데이터를 옮길 수 있습니다.
    다음 Activity에서 키를 사용하여 텍스트 값을 가져오므로, 키는 public constant입니다.  앱의 패키지 이름을 접두사로 사용해 키를 정의하는 것이 좋습니다. 그러면 다른 앱과 상호작용하는 경우 키가 고유하게 유지될 수 있습니다.
  • startActivity() 메서드는 Intent를 지정하는 NextActivity의 인스턴스를 시작합니다.

두 번째 Activity 만들기

마우스 우클릭 후, "New > Activity > Empty Activity"를 선택하여 간편하게 Activity 파일, 레이아웃 파일을 생성하고, 필수 <activity> 요소를 AndroidManifest.xml에 추가합니다.

메시지 표시

Intent를 통해 전달받은 데이터는 다음과 같이 Key를 통해 얻을 수 있습니다.

override fun onCreate(savedInstanceState: Bundle?) {
	...
    
    // Get the Intent that started this activity and extract the string
    val message = intent.getStringExtra(EXTRA_MESSAGE)
}

상향 탐색 추가

기본(main) 진입점이 아닌 각 화면(홈 화면이 아닌 모든 화면)에서는 사용자를 앱 계층 구조 내의 논리적 상위 화면으로 안내(navigation)하는 탐색 기능을 제공해야 합니다. 아래는 상위 화면으로 안내하기 위해 앱 바에 Up  버튼을 추가합니다.

<activity android:name=".NextActivity"
          android:parentActivityName=".MainActivity">
    <!-- The meta-data tag is required if you support API level 15 and lower -->
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value=".MainActivity" />
</activity>