이번에는 Activity 를 새로 만들고, 만든 Activity 를 시작하는 방법에 대해 알아본다.

Android 는 Activity 를 시작시킨 때 Intent 를 기반으로 하여 시작시킨다. 이 Intent 에 메인 뷰의 EditText 로 입력받은 String 을 추가하여 새로 만든 Activity 를 시작할 때 넘겨주고, Activity 는 TextView 를 포함하는 Layout (ViewGroup)을 통해 전달받은 메시지를 표시해주는 방식이다.

▌버튼 눌렸을 때 호출 될 메소드 정의하기

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/button_send"
    android:onClick="sendMessage"/>


▌새로운 Activity 실행위한 Intent 생성하기

public void sendMessage(View view) {
    Intent intent = new Intent(this, DisplayMessageActivity.class)// Intent 를 신규 생성, DisplayMessageActivity 를 실행하기 위한 Intent 를 생성함
    EditText editText = (EditText) findViewById(R.id.edit_message)// 현재 Activity 의 OnCreate 에서 처리된 Bundle 의 XML 내에 있는 id 값에 해당하는 View 를 가져옴
    String message = editText.getText().toString()// EditText 의 값 가져옴
    intent.putExtra(EXTRA_MESSAGEmessage)// EXTRA_MESSAGE 를 Key 로 하고 내용을 message 로 하는 데이터를 Intent 에 추가 함. Key-Value Pair 의 extra 를 Intent 에 추가함
    startActivity(intent);
}

public final static String EXTRA_MESSAGE "com.goodjoon.helloandroid.MESSAGE";


▌Activity 추가를 위한 과정

  1. Activity XML 생성
  2. strings.xml 에 Activity Title 추가
  3. Content XML 생성
  4. Android Manifest 에 Activity 등록
  5. Activity 클래스 작성

▌신규 Activity 추가 - Studio 의 New Activity 기능 사용하여 추가하기


원하는 Package 에서 우측클릭>New>Activity>Blank Activity 를 눌러서 Activity 를 추가한다.


Activity 이름을 주고, 중간의 Hierarchical Parent 에서 "..." 을 눌러 메인 Activity 인 HelloActivity 를 선택한다.


Hierarchical Parent

Activity 를 추가할 때 Hierarchical Parent 를 주면, 기본적인 Navigation 동작이 추가된다. up Navigation 버튼이 Navigation Bar 에 추가되고, Back 버튼을 눌렀을 때 Parent Activity 가 호출되는 등의 Action 이 실행된다.

<androidManifest.xml> 내용 중
<activity
    android:name=".DisplayMessageActivity"
    android:label="@string/title_activity_display_message"
    android:parentActivityName=".HelloActivity"
    android:theme="@style/AppTheme.NoActionBar">
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value="com.goodjoon.helloandroid.HelloActivity" />
</activity>

위에서 android:parentActivityName=".HelloActivity" 가 추가된 것을 볼 수 있다.
나중에 수동으로 Activity 를 추가하면 저렇게 parentActivity 를 주면 된다.

위 과정으로 추가하면

  1. Activity XML 생성
  2. Content XML 생성
  3. AndroidManifest.xml 에 Activity 등록
  4. string.xml 에 Activity Title 등록
  5. Activity 클래스 추가

와 같은 과정이 자동으로 실행된다

  1. Activity XML 생성


  1. Content XML 생성

Content XML 이 생성되면 아래와 같이 RelativeLayout 요소의 마지막에 android:id="@+id/content" 를 하여 id 를 하나 부여해주어 Code 에서 findViewById() 로 쉽게 Layout 을 갖고오게 하자.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    ...
    android:id="@+id/content">


  1. Activity 클래스에서 메시지 받아 출력해주기

TextView 뷰를 하나 추가하고, Intent 의 Message 를 TextView 에 출력하도록 할 것이다.
Layout XML 에 추가하는 방법 말고, Activity 클래스에서 코드로 추가하는 방법으로 해본다.

일단, 자기 Activity 를 실행시킨 Intent 내에 Extra 데이터(메시지)를 가져오고,
TextView 뷰를 생성한 다음, 이 뷰를 Layout 을 가져와 그 Layout 에 추가하는 작업을 한다.

코드는 아래와 같다. 자동 생성된 Activity 클래스의 onCreate 의 하단에 해당 내용을 추가하면 된다.
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_display_message);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Snackbar.make(view"Replace with your own action"Snackbar.LENGTH_LONG)
                    .setAction("Action", null).show();
        }
    });
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    // Activity 는 자신을 시작시킨 Intent 를 가져올 수 있음
    // Intent 에서 메시지를 가져오도록 함
    Intent intent = this.getIntent();
    String message = intent.getStringExtra(HelloActivity.EXTRA_MESSAGE);

    // TextView Object 를 만든다
    TextView textView = new TextView(this);
    textView.setTextSize(40);
    textView.setText(message);

    // 만들어진 TextView 를 RelativeLayout 에 붙인다
    RelativeLayout layout = (RelativeLayout) findViewById(R.id.content);
    layout.addView(textView);

}


▌실행 결과

 


실행 결과는 위와 같다. 텍스트를 입력하고 "보내기" 버튼을 누르면 Intent 를 생성하여 ExtraData 로 Message 를 추가하고, DisplayMessageActivity 를 생성한 Intent 로 시작시킨다.(실행 보다는 '시작' 이 적합한 단어라고 생각한다)










반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,