안드로이드 튜토리얼 목차 - Android Tutorial List

[Android Tutorial #05] Activity 전환하기(액티비티/화면 전환하기)

제가 처음에 안드로이드 프로그래밍을 하면서 가장 궁금했던건, 화면을 어떻게 다른 화면으로 바꾸는가! 였습니다.

터치나 클릭, 데이터 입력과 결과값 출력, 그리고 화면전환을 할 수 있다면, 이후의 애플리케이션 개발은 상당히 수월해 질 수 있죠.

그래서 버튼 클릭에 대해서 살펴본 후, 바로 화면 전환에 대해서 알아보려합니다.
(이전글 : [Android Tutorial #04] Button(버튼)과 클릭 이벤트])
 


 Activity와 View(Layout xml) 만들기

이번 주제는 앞에서 말했다시피, 액티비티의 전환(화면의 전환)입니다.

하나의 화면에서 다른 화면으로 바꾸기 위해, 2개의 Activity, 그리고 2개의 View가 필요하겠죠? 

애플리케이션이 시작할때 보여지는 액티비티를 FirstActivity.java, 그리고 FirstActivity에서 이동하려는 액티비티를 SecondActivity.java 라고 해봅니다.
또 이 액치비티들과 연결될 View들을, first_activity.xml, second_activity.xml 이라고 해보죠. 


그리고 아래 그림과 같은 쌍으로 사용하게 되겠죠.


이번 예제에서 2개의 java파일(Activity), 2개의 xml(layout)파일을 만들고 수정할 겁니다. 



아래 스크린샷들을 따라서 프로젝트를 만들어 봅시다.

 

- 프로젝트 이름은 AndoirTutorial05라고 정해보았습니다.



Build Target은 Andoird 2.2를 선택해줍니다.
(아직은 2.2의 API를 사용하지 않아 하위 버전도 괜찮습니다.)




- 패키지 이름은 각각 개별적으로 정의해도 문제없습니다.
- Create Activity에서 Activity의 이름을 FirstActivity로 변경했습니다.



- 프로젝트가 정상적으로 생성되었는지를 왼쪽의 Project Explorer에서 확인합니다.



처음에 xml의 이름을 first_activity.xml, second_activity.xml이라고 하기로 했으니, main.xml의 이름을 first_activity.xml로 바꾸어줍니다.
 

- Mac 단축키 : Command + Option + R
- Windows 단축키 : Alt + Shift + R



main.xml의 이름을 바꾸어주면, FirstActivity에서 다음과 같이 에러가 날것입니다.
setContentView(R.layout.main)을 setContentView(R.layout.first_activity)로 변경해줍니다.





이제 SecondActivity.java와 second_activity.xml을 만들어줄 차례입니다.

먼저 second_activity.xmllayout폴더에 생성합니다.



Project Explorer에서 만들어져 있는걸 확인한 후, second_activity.xml을 수정해줍니다.

 

res/layout/second_activity.xml 





이번에는 SecondActivity를 추가할 차례입니다. AndroidManifest를 열어보도록 하죠.

잘 따라오셨다면 아래와 같은 화면을 보실 수 있을겁니다.
여기에서 하단의 Application Tab을 선택합니다.

 



애플리케이션 탭의 왼쪽 아래에 보면 아래와 같은 부분이 보입니다.
Application Nodes라는 영역이죠. [Add...] 버튼을 클릭합니다.




그럼 아래 스크린샷 처럼 선택하는 창이 생기는데,
우리는 Activity를 만들려고 하는 것이니 Activity를 선택하고 [OK]버튼을 클릭합니다.





여기까지 하셨으면, Application Nodes 영역에 Activity가 추가된 것이 보입니다.
이 액티비티를 선택하면 오른쪽에 Attributes for Activity 영역이 나타납니다.
보기만해도 Name*을 누르고 싶게 생겼죠? 눌러줍니다.




클래스를 새로 생성하는 창이 뜹니다. 클래스의 이름을 정하는 Name부분에 SecondActivity라고 이름을 입력한 후 [Finish]버튼을 눌러 생성해줍니다.




Project Explorer를 보면 만들려던 파일들이 모두 만들어져 있는것을 볼 수 있습니다.

 





 Activity와 xml 연결하기, 화면 전환하기

이제 만들어준 Activity들과 xml을 연결할 차례입니다.

Activity는 setContentView(~~) 라는 메소드를 통해, layout폴더에 있는 xml 파일을 Activity에 연결하고, xml에 만들어둔 뷰를 화면에 보여 줄 수 있습니다.




first_activity.xml을 수정합니다.

수정한 first_activity.xml




수정한 first_activity.xml과 FristActivity.java를 연결해줍니다.

수정한 FirstActivity.java 





프로젝트를 실행해봅니다.

아래와 같이 애플리케이션이 실행된 모습을 볼 수 있습니다.
버튼을 눌러 이동해 봅니다. 





두번째 액티비티로 이동한 모습입니다.
그런데 위에서 xml에 입력해 놓은 텍스트가 보이지 않는군요?

아! SecondActivity와 second_activity.xml을 연결해 주지 않았습니다. 




기본으로 생성된 SecondActivity.java




수정한 SecondActivity.java




이제 다시 프로젝트를 실행시켜봅시다.

이번에는 만들어둔 대로 화면이 제대로 출력된 것을 확인할 수 있습니다.

 

 



처음 액티비티를 생성하고 setContentView(R.layout.file_name);을 해주지 않으면, 액티비티는 화면에 아무것도 보여주지 못합니다. 기초적인것이지만, 반드시 기억해주어야하는 것이죠.

새롭게 액티비티를 생성해서, 이 액티비티에 보여줄 화면을 res/layout/ 폴더에 xml로 만들어주고, 액티비티와 연결해주기만 하면 됩니다.



프로젝트 압축파일

AndroidTutorial05.zip





Posted by croute

댓글을 달아 주세요

  1. Favicon of https://blog.chansol.net BlogIcon milaero 2011.12.13 00:17 신고  댓글주소  수정/삭제  댓글쓰기

    버튼을 누르지 않고 자동으로 넘어가는건 어떻게 할까요.
    로딩화면의 경우엔 2~3초 지나고 자동으로 넘어가야 하니까요 ㅎㅎ

    • Favicon of https://croute.me BlogIcon croute 2011.12.13 13:57 신고  댓글주소  수정/삭제

      Activity의 생명주기(생애주기, Lifecycle)중 시작 하는 부분들 에서

      new Handler().postDelayed(new Runnable()
      {
      @Override
      public void run()
      {
      Intent intent = new Intent(.....);
      startActivity(intent);
      }
      }, 2000);

      이런식으로 해주면, 지정한 시간(여기서는 2000)이 지난 후 액티비티를 이동 할 수 있습니다.

      시간 단위는 ms입니다. ㅎ

    • Favicon of https://blog.chansol.net BlogIcon milaero 2011.12.14 00:37 신고  댓글주소  수정/삭제

      Intent intent = new Intent(.....);
      이부분에 '....'을 이동할 액티비티를 넣으면 되는건가요?

    • Favicon of https://croute.me BlogIcon croute 2011.12.14 02:11 신고  댓글주소  수정/삭제

      네 그부분에 보통은,

      new Intent(this, 이동할액티비티.class);
      라고 넣는데, 지금은 Handler의 Runnable 객체 안에 있어서 this라고 쓰면 Runnable이 되니,
      지금있는액티비티이름.this, 이동할액티비티.class 라고 써야합니다.

    • Favicon of https://blog.chansol.net BlogIcon milaero 2011.12.14 03:21 신고  댓글주소  수정/삭제

      해결이 되었네요. 감사합니다! :D
      즐거운 하루 되세요~!

    • Favicon of https://croute.me BlogIcon croute 2011.12.14 09:50 신고  댓글주소  수정/삭제

      네 ㅎㅎ 재밌게 코딩하세요~ ㅎㅎ

  2. Favicon of http://dalinaum-kr.tumblr.com BlogIcon 달리나음 2011.12.13 23:17  댓글주소  수정/삭제  댓글쓰기

    자세하게 리뷰해주는 글 읽기 재밌네요. 저는 이클립스에 익숙하지 않아서 더더욱 재미납니다. :)

  3. 수박조아 2012.01.04 14:27  댓글주소  수정/삭제  댓글쓰기

    감사합니다...많이 배우가 갑니다

  4. 도라도라 2012.03.13 11:59  댓글주소  수정/삭제  댓글쓰기

    잘 보고 있습니다~

    버튼을 클릭하면 안드로이드 프로세서 오류가 나면서 이동이 안되는건 왜 그런걸까요ㅠㅠ

    • Favicon of https://croute.me BlogIcon croute 2012.03.13 16:41 신고  댓글주소  수정/삭제

      첫번째로 추측해 볼 수 있는 건
      AndroidManifest.xml 에 두번째 액티비티가 제대로 선언되어있지 않은 경우입니다.
      이럴때는 해당 액티비티(또는 클래스)를 찾을 수 없어서 에러가 발생합니다.

      두번째로 추측해 볼 수 있는 건
      AndroidManifest.xml 에 두번째 액티비티가 제대로 선언되어있지만, 패키지 주소가 틀린경우 입니다.

  5. 하루하루 2012.04.11 21:55  댓글주소  수정/삭제  댓글쓰기

    거의 다 따라왔는데.........수정한 SecondActivity.java 에서

    public class SecondActivity extends Activity
    이 부분중에 SecondActivit<- 부분이 빨간 줄로 밑줄 그어져 잇는데... 왜 에러가 난걸까요 ㅠㅠ

    다 맞게 했는데........

  6. ㅇㅅㅇ 2012.08.15 00:28  댓글주소  수정/삭제  댓글쓰기

    안녕하세요~
    저는 지금 졸작으로 achartengine으로 그래프를 구현하는 어플을 만드려는 대학생입니다 ^ ^

    제가 지금 막힌 부분이..
    지금까지는 intent로 그래프를 받았었는데
    구글링 해보니까 실시간 업데이트를 하기위해서는 graphicalview로 받아야할거 같이 나오더라구요..

    핸들러를 쓰면 intent로 써야하는게 맞나요??

    그리고 intent에서는 mdataset을 못쓰는 건지도.. 궁금합니다-

    • Favicon of http://croute.me BlogIcon croute 2012.08.17 19:02  댓글주소  수정/삭제

      음... 질문내용을 잘 모르겠어요 ㅋ
      핸들러를 쓰면 인텐트로 쓴다는게 어떤의미인가요?
      그리고 mdataset은 어딘가에 특화된 속성같은데... 그게 뭘 의미하는지 제가 알수가없죠.

  7. 1ㅅ1 2013.02.08 11:41  댓글주소  수정/삭제  댓글쓰기

    처음 만들때 배경색을 흰색으로 만들어버려서 두번째 액티비티에서 왜 글씨가 안보이나 했네요.. ㅋ

  8. BlogIcon heee 2013.03.31 06:52  댓글주소  수정/삭제  댓글쓰기

    안녕하세요~
    안드로이드 기초를 다지고 있는 과정에서 많이 배우고 갑니다.
    다름이 아니라 위의 내용대로 해보았는데
    실행하였을 때, 첫 화면에서 버튼이 보이질 않네요ㅠㅠ
    왠지 xml이랑 연결 부분에서 잘못 된 것 같은데..그대로 했는데 왜 안 나타나는 걸까요..??ㅠㅠ

    • Favicon of https://croute.me BlogIcon croute 2013.03.31 10:56 신고  댓글주소  수정/삭제

      음...
      추측해보자면,

      1. 직접 만드신 xml 을 액티비티에 연결한게 아닌 경우,
      2. 직접 만든 xml 을 연결했지만, 해당 xml 에 버튼이 없는 경우,
      3. 직접 만든 xml 을 연결했고, 해당 xml 에 버튼이 있지만, orientation 이나 layout size 등의 이유로 보이지 않는 경우

      등이 있을것 같네요.

    • heee 2013.04.01 23:38  댓글주소  수정/삭제

      우와ㅠㅠ
      친절한 설명에 감사드려요!
      해결되었네요^^

  9. BlogIcon 어려워요 2013.07.25 17:00  댓글주소  수정/삭제  댓글쓰기

    잘보고있습니다.

    버튼을 누르면 예상치 않게 중지되었다고 다시시도하라는 메세지가 뜨는데 왜그런거죠