본문 바로가기

Android

안드로이드에서 Activity 시작하기 - startActivity()

안드로이드에서 Activity를 추가하고, 추가한 Activity로의 이동 과정을 정리해 보겠습니다.


다음 그림처럼 Android에서는 AndroidManifest.xml에 모든 Activity들을 등록하여 관리합니다. 각각의 Activity는 특별한 경우가 아니라면 화면을 구성하는 layout.xml를 하나씩 갖게 되고, 이는 Activity의 setContentView() 메소드를 통해 연결할 수 있습니다. 


특정 사용자 이벤트 등을 통해 다른 Activity로 이동을 하게 되는데 이 때는 startActivity() 메소드를 이용합니다. 만약 새로 시작하는 Activity에서 뭔가를 수행 후 그 결과를 가져와서 사용해야 한다면 startActivityForResult() 메소드를 이용하여 Activity를 시작하고, onActivityResult() 메소드에서 그 결과를 받아서 이용할 수 있습니다. 




이제 이 절차들에 대해 하나씩 자세히 살펴보도록 하겠습니다.



1. AndroidManifest.xml에 Activity 추가


Activity의 이름을 결정한 후 (여기서는 ActivityB) AndroidManifest.xml의 <application> 아래에 추가합니다. android:name이 ".ActivityB"로 앞에 '.' 이 있는데, 이는 package (<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="net.zeany.sample">) 바로 아래에 위치한다는 의미입니다. 추가로 아래 예에서는 세로 화면으로 고정하고, 화면이 변경될 때 다시 Activity를 로딩하지 않도록 설정했습니다.


1
2
3
4
5
6
7

<application> ... <activity android:name=".ActivityB" android:screenOrientation="portrait" android:configChanges="orientation|keyboardHidden|screenSize"> </activity>



2. Activity 추가


위에서 결정한 이름으로 Activity (여기서는 ActivityB.java)를 추가합니다. 그리고 onCreate() 메소드에서 setContentView() 메소드를 이용하여 (아직 생성하진 않았지만) layout 파일을 추가합니다. (여기서는 res\layout\activity_b.xml)


1
2
3
4
5
6
7
public class ActivityB extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_b);

	...



3. layout.xml 작성


res\layout 디렉토리 아래에 원하는 이름으로 (위에서 추가한 - activity_b.xml) layout 파일을 추가합니다. (File > New > Layout resource file). 


1
2
3
4
5
6
7
8
9
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    ...

</RelativeLayout>



4. 생성한 Activity 시작


보통 사용자의 이벤트 (여기서는 button 클릭)를 통해 새로운 Activity를 시작하곤 합니다. Activity의 시작은 startActivity() 메소드를 이용하며 인수로는 Intent에 Context (ActivityA.this)와 시작한 Activity의 class (ActivityB.class)를 담아서 사용합니다.


1
2
3
4
5
6
7

button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(ActivityA.this, ActivityB.class); startActivity(intent); } });



이렇게 Activity를 새로 생성하고 시작하는 것을 살펴봤습니다. 다음에는 startActivityForResult()를 이용하여 시작한 Activity로부터 결과를 받아서 사용하는 방법에 대해 알아보겠습니다.