다른 활동 시작

이전 과정을 완료했으면 텍스트 필드와 버튼이 포함된 활동(단일 화면)을 보여주는 앱이 있을 것입니다. 이 과정에서는 사용자가 전송을 탭하면 메시지를 표시하는 새 활동을 시작하는 MainActivity에 코드를 추가합니다.

참고: 이 과정에서는 Android 스튜디오 3.0 이상을 사용한다고 가정합니다.

Send 버튼에 응답

MainActivity 클래스에 다음과 같이 버튼을 통해 호출되는 메서드를 추가합니다.

  1. app > java > com.example.myfirstapp > MainActivity 파일에서 아래와 같이 sendMessage() 메서드 스텁을 추가합니다.

    Kotlin

        class MainActivity : AppCompatActivity() {
            override fun onCreate(savedInstanceState: Bundle?) {
                super.onCreate(savedInstanceState)
                setContentView(R.layout.activity_main)
            }
    
            /** Called when the user taps the Send button */
            fun sendMessage(view: View) {
                // Do something in response to button
            }
        }
        

    자바

        public class MainActivity extends AppCompatActivity {
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
            }
    
            /** Called when the user taps the Send button */
            public void sendMessage(View view) {
                // Do something in response to button
            }
        }
        

    Android 스튜디오는 메서드 인수로 사용되는 View 클래스를 확인할 수 없으므로 오류가 나타날 수도 있습니다. 따라서 클릭하여 커서를 View 선언에 놓은 후 Alt + Enter(Mac의 경우 Option + Enter)를 눌러 빠른 수정을 수행합니다. (메뉴가 나타나면 클래스 가져오기를 선택합니다.)

  2. 이제 activity_main.xml 파일로 돌아가서 버튼을 통해 이 메서드를 호출합니다.
    1. Layout Editor에서 버튼을 선택하려면 클릭합니다.
    2. 속성 창에서 onClick 속성을 찾은 후 드롭다운 목록에서 sendMessage [MainActivity]를 선택합니다.

이제 버튼을 탭하면 시스템에서 sendMessage() 메서드를 호출합니다.

이 메서드의 세부정보를 메모해 두세요. 시스템에서 이 메서드가 android:onClick 속성과 호환되는 것으로 인식하는 데 이러한 세부정보가 필요합니다. 특히, 이 메서드는 다음과 같은 특성을 가지고 있습니다.

  • 공개 액세스
  • 무효, Kotlin에서는 암시적 단위 반환 값
  • View가 유일한 매개변수(클릭한 항목이 View 객체임)

다음에는, 텍스트 필드 콘텐츠를 읽고 해당 텍스트를 다른 활동으로 전달하도록 이 메서드를 채웁니다.

Intent 빌드

Intent는 개별 구성요소(예: 두 개의 활동) 간에 런타임 바인딩을 제공하는 객체입니다. Intent는 앱의 "어떤 작업을 수행하려는 의도"를 나타냅니다. 인텐트는 다양한 작업에 사용할 수 있지만 이 과정에서는 인텐트를 사용하여 다른 활동을 시작해 보겠습니다.

MainActivity에서 아래와 같이 EXTRA_MESSAGE 상수와 sendMessage() 코드를 추가합니다.

Kotlin

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

    class MainActivity : AppCompatActivity() {
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
        }

        /** Called when the user taps the Send button */
        fun sendMessage(view: View) {
            val editText = findViewById<EditText>(R.id.editText)
            val message = editText.text.toString()
            val intent = Intent(this, DisplayMessageActivity::class.java).apply {
                putExtra(EXTRA_MESSAGE, message)
            }
            startActivity(intent)
        }
    }
    

자바

    public class MainActivity extends AppCompatActivity {
        public static final String EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE";
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }

        /** Called when the user taps the Send button */
        public void sendMessage(View view) {
            Intent intent = new Intent(this, DisplayMessageActivity.class);
            EditText editText = (EditText) findViewById(R.id.editText);
            String message = editText.getText().toString();
            intent.putExtra(EXTRA_MESSAGE, message);
            startActivity(intent);
        }
    }
    

Android 스튜디오에 다시 기호를 해석할 수 없음 오류가 발생하므로 Alt + Enter(Mac의 경우 Option + Return)를 누릅니다. 가져오기는 다음과 같이 끝나야 합니다.

Kotlin

    import android.content.Intent
    import android.support.v7.app.AppCompatActivity
    import android.os.Bundle
    import android.view.View
    import android.widget.EditText
    

자바

    import android.content.Intent;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.EditText;
    

여전히 해결되지 않은 DisplayMessageActivity에 관한 오류는 다음 섹션에서 해결할 수 있습니다.

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

  • Intent 생성자는 다음 두 가지 매개변수를 사용합니다.
    • 첫 번째 매개변수 Context(thisActivity 클래스가 Context의 서브클래스이므로 사용됨)
    • 시스템이 Intent를 전달할 앱 구성요소의 Class(이 경우, 시작되어야 하는 활동)
  • putExtra() 메서드는 EditText의 값을 인텐트에 추가합니다. Intent는 데이터 유형을 엑스트라라고 하는 키-값 쌍으로 전달할 수 있습니다. 다음 활동에서 키를 사용하여 텍스트 값을 검색하기 때문에 키는 공용 상수 EXTRA_MESSAGE입니다. 앱 패키지 이름을 접두사로 사용해 인텐트 엑스트라 키를 정의하는 것이 좋습니다. 그러면 앱이 다른 앱과 상호작용하는 경우 키가 고유하게 유지됩니다.
  • startActivity() 메서드는 Intent를 통해 지정된 DisplayMessageActivity 인스턴스를 시작합니다. 이제 클래스를 만들어야 합니다.

현재 알파 단계인 탐색 아키텍처 구성요소를 사용하면 탐색 편집기를 통해 한 활동을 다른 활동과 연결할 수 있습니다. 관계가 설정되고 나면 사용자가 연결된 작업을 트리거하는 경우 즉, 버튼을 클릭하는 경우 API를 사용하여 두 번째 활동을 시작할 수 있습니다. 자세히 알아보려면 탐색 아키텍처 구성요소를 참조하세요.

두 번째 activity 생성

  1. 프로젝트 창에서 app 폴더를 마우스 오른쪽 버튼으로 클릭하고 새로 만들기 > 활동 > 빈 활동을 선택합니다.
  2. 활동 구성 창에서 활동 이름에 "DisplayMessageActivity"를 입력하고 완료를 클릭합니다(다른 모든 속성은 기본값으로 그대로 둠).

Android Studio는 다음 세 가지 작업을 자동으로 수행합니다.

  • DisplayMessageActivity 파일을 만듭니다.
  • 해당 activity_display_message.xml 레이아웃 파일을 만듭니다.
  • AndroidManifest.xml에 필수 <activity> 요소를 추가합니다.

앱을 실행하고 첫 번째 활동에서 버튼을 탭하면 두 번째 활동이 시작되지만 이 활동은 비어 있습니다. 두 번째 활동이 템플릿에서 제공하는 빈 레이아웃을 사용하기 때문입니다.

텍스트 뷰 추가

그림 1. 레이아웃 상단에 가운데 정렬된 테스트 뷰

새 활동에는 빈 레이아웃 파일이 포함되어 있으므로, 이제 메시지를 표시할 텍스트 뷰를 추가하겠습니다.

  1. app > res > layout > activity_display_message.xml 파일을 엽니다.
  2. 툴바에서 자동 연결 켜기()를 클릭합니다(그러면 이 기능이 그림 1과 같이 사용 설정됨).
  3. 팔레트 창에서 텍스트를 클릭하고 TextView를 레이아웃으로 드래그한 후 레이아웃 상단 중앙 부근에 드롭하여 표시되는 세로 줄에 맞춰지도록 합니다. Autoconnect는 뷰를 가로 중앙에 배치하도록 왼쪽 및 오른쪽 제약 조건을 추가합니다.
  4. 그림 1과 같이 나타나도록, 텍스트 뷰 상단에서 레이아웃 상단까지 제약 조건을 하나 더 만듭니다.

선택적으로, 속성 창에서 textAppearance를 확장하여 텍스트 스타일을 조정하고 textSizetextColor 같은 속성을 변경합니다.

메시지 표시

이제 두 번째 활동을 수정하여 첫 번째 활동이 전달한 메시지를 표시해 보겠습니다.

  1. DisplayMessageActivity에서 다음 코드를 onCreate() 메서드에 추가합니다.

    Kotlin

        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_display_message)
            
            // Get the Intent that started this activity and extract the string
            val message = intent.getStringExtra(EXTRA_MESSAGE)
    
            // Capture the layout's TextView and set the string as its text
            val textView = findViewById<TextView>(R.id.textView).apply {
                text = message
            }
        }
        

    자바

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_display_message);
            
            // Get the Intent that started this activity and extract the string
            Intent intent = getIntent();
            String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
    
            // Capture the layout's TextView and set the string as its text
            TextView textView = findViewById(R.id.textView);
            textView.setText(message);
        }
        
  2. Alt + Enter(Mac의 경우, Option + Return)를 눌러 누락된 클래스를 가져옵니다. 가져오기는 다음과 같이 끝나야 합니다.

    Kotlin

        import android.content.Intent
        import android.support.v7.app.AppCompatActivity
        import android.os.Bundle
        import android.widget.TextView
        

    자바

        import android.content.Intent;
        import android.support.v7.app.AppCompatActivity;
        import android.os.Bundle;
        import android.widget.TextView;
        

위로 탐색 추가

앱에서 기본 진입점이 아닌 각 화면("홈" 화면이 아닌 모든 화면)은 사용자가 앱바의 위로(Up) 버튼을 탭하여 앱 계층 구조의 논리적 상위 화면으로 돌아갈 수 있는 탐색 기능을 제공해야 합니다.

개발자는 AndroidManifest.xml 파일에서 어떤 활동이 논리적 상위인지 선언하기만 하면 됩니다. 이렇게 하려면 app > manifests > AndroidManifest.xml에서 파일을 열고 DisplayMessageActivity<activity> 태그를 찾아 다음으로 바꿉니다.

    <activity android:name=".DisplayMessageActivity"
              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>
    

이제 Android 시스템이 위로(Up) 버튼을 앱 바에 자동으로 추가합니다.

앱 실행

이제 툴바에서 변경사항 적용()을 클릭하여 다시 앱을 실행합니다. 앱이 열리면 텍스트 필드에 메시지를 입력하고 전송을 탭하여 두 번째 활동에 이 메시지가 나타나는지 확인합니다.

그림 2. 두 activity의 스크린샷

이것으로 첫 번째 Android 앱을 빌드했습니다.

Android 앱 개발의 기본 사항에 관해 계속 알아보려면 이 가이드 메인 페이지에 있는 다른 링크를 따라가 보세요.