안녕하세요?


이번 포스팅에서는 새로운 액티비티라고 해야 할까요? 간단하게 새로운 화면을 추가하고, 여기로 이동할 수 있는 버튼을 추가해서 구현하는 방법을 포스팅하고자 합니다.


우선 안드로이드 스튜디오를 열어서 새 포르젝트를 생성하기를 누릅니다. 이번에는 책에서 나와았는 데로 우선 프로젝트의 이름만은 Sample5-3으로 맞추고서 작업에 들어갑니다.


우선 package explorer에 있는 java폴더로 가서, 그 아래에 있는 MainActivity.java라는 파일을 우클릭해서 메뉴를 열어 봅니다.



위 스크린샷에서 보는 것과 같이 New라는 메뉴에 들어가서 나오는 하위 메뉴에서 Activity를 선택해서 새로운 화면을 만들고자 합니다.

물론 여기서는 아직 예제이기 때문에 Empty Activity라는 기본형을 선택하도록 합니다.


일단 첫번째 액티비티는 Activity name이라는 항목에서는 OneActivity라고 지정하고, 그 아래에 있는 layout name항목에서는 activity_one이라고 작성합니다. 말은 작성한다고 했지만, layout name항목은 위에 있는 Activity name을 작성하면 거의 자동으로 작성이 되었습니다.


같은 작업으로 첫번째 액티비티를 작성했다면, 다음으로는 두번째 액티비티를 작성하러 갑니다. Activity name을 TwoActivity라고 지정을 하고, 다음으로 layout name으로 activity_two로 만들어 둡니다. 


다음으로는 옆의 그림과 같이 res폴더 아래에 있는 layout폴더로 가서, activitymain.xml로 가서 Design탭을 열어서 보는 화면입니다.


가장 먼저 Hello world!라고 적혀 있는 레이블을 제거한 다음, 다음에는 버튼 두개를 추가합니다.그리고 옆에 있는 property 항목을 보면, text 항목을 첫번째 버튼은 PAGE1으로 만들어 둡니다.


그 다음에는 두번째 버튼에 가서는 text항목을 PAGE2라고 적어 둡니다. 그리고 각각의 버튼이 어떤 ID로 되어 있는 지 잘 봐두고 움직이도록 합니다.


Design탭에서는 작업이 끝이 났다면, 다음으로는 MainActivity.java파일 탭으로 가서, 본격적인 코딩을 하는 작업을 시작합니다.


setContentView(R.id.activitymain); 항목 아래에 다음과 같은 코드를 추가하기 시작합니다.


Button button = (Button)findViewById(R.id.button);

button.setOnClick Listener(new View.OnClickListener){

   public void onClick(View v) {

     Intent intent = new Intent (MainActivity.this, OneActivity.class);

     startActivity(intent);

     }

    });

이렇게 코딩을 함으로서 첫번째 버튼을 누르면, 첫번째로 추가한 액티비티가 열리도록 버튼의 기능을 구현합니다.


그리고 첫번째 코딩 바로 연결해서 다음과 같은 코드를 추가합니다.


Button button1 = (Button)findViewById(R.id.button2);

button1.setOnClickListener(new View.OnClickListener(){

  public void onClick(View v){

    Intent intent = new Intent (MainActivity.this, TwoActivity.class);

   startActivity(intent);

  }

 });


이제 USB로 휴대폰을 연결해서 한번 제대로 작동하는 지 알아보는 시간입니다. 제가 갤럭시 S2로 확인을 해본 결과, PAGE1이라는 버튼을 누르면 첫번째 액티비티로 가는 것을 확인했으며, PAGE2버튼을 눌렀을 경우 두번째 액티비티로 가는  것을 확인하였습니다.


이번에는 첫번째 액티비티와 두번째 액티비티에 각각 버튼을 추가해서 누르면 메인 액티비티로 돌아오는 기능을 구현해 봅니다.



위 스크린샷은 첫번째로 추가된 액티비티를 activity_one.xml에서 Design탭으로 본 화면입니다. 아무것도 없는 화면에다가 레이블 컴포넌트와 버튼 컴포넌트를 추가했으며, 버튼의 ID가 button3인 것을 봐 둡니다.


그 다음에는 OneActivity.java로 가서 다음과 같은 코딩을 setContentView(R.layout.activity_one); 아래에 다음과 같이 코드를 입력합니다.


Button button = (Button)findViewById(R.id.button3);

button.setOnClickListener(new View.OnClickListener(){

  pubic void onClick(View v){

     Intent intent = new Intent(OneActivity.this, MainActivity.class);

     startActivity(intent);

    }

    });


그 다음으로는 두번째로 추가된 액티비티로 가서 다음과 같이 디자인 부터 시작합니다.



위 그림과 같이 두번째로 추가한 액티비티를 activity_two.xml로 가서 Design탭을 엽니다. 그 다음에는 Page2라고 문자 레이블을 추가하고 다음에는 버튼 컴포넌트를 추가합니다.


그리고 첫번째 액티비티와 같은 경우와 같이 코드를 추가합니다.


Button button = (Button)findViewById(R.id.button4);

button.setOnClickListener(new View.OnClickListener(){

  public void onclick(View v){

   Intent intent = new Intent(TwoActivity.this, MainActivity.class);

   startActivity(intent);

  }

  });


그리고 마침내 USB로 연결된 갤럭시 S2를 통해서 실험한 결과 메인 액티비티로 돌아가는 것을 볼 수 있었습니다.


이번 실습으로 알게 된 중요한 사실이, 버튼의 기능을 구현하는 코드가 다음과 같다는 것입니다.


Button 변수이름 = (Button)findViewById(R.id.버튼의 ID);

변수이름.setOnClickListener(new View.OnClickListener(){

  public void onClick(View v){


여기까지가 일관되게 버튼을 누를 경우 어떤 효과가 나오는 것을 구현할 때 언제나 나오는 문구였습니다. 그 다음으로는 저기서 빨간색으로 처리가 된 변수이름은 항상 같아야만 합니다. 제 경우에는 이걸 틀려서 종종 에러를 일으키는 경우가 많이 있었습니다.


다음으로 새로운 액티비티를 불러오는 Intent를 다음과 같이 사용합니다.


Intent intent = new Intent (현재 액티비티 이름.this, 불러올 액티비티 이름.class);

statActivity(intent);


여기서 액티비티 이름이란, 처음에 액티비티를 추가할 때 작성한 Activity name이며, 다음과 같은 문구를 위에서 언급한 public void onClick(View v){ 이후에 추가하면, 버튼을 눌렀을 때 무슨일이 일어날지를 만들 수 있습니다.


그런데.


여기서 중요한게 OneActivity와 TwoActivity에서 책에서는 finish();를 두고 있습니다. 이를 OneActivity.java에서 어떻게 코딩하느냐 하면, 


Button button = (Button)findViewById(R.id.button3);

button.set OnClickListener(new View.onClickListener() {

  public void onClick(View v) {

   finish();

 }

});


제가 했는 코딩과 책에서의 코딩이 무슨 차이가 있냐하면, 제가 했는 코딩은 액티비티를 이동만 합니다. 그래서 액티비티가 실행만 되고, 종료가 되지 않기 때문에 뒤로가기 버튼을 누르면 다음과 같은 현상이 벌어 질 수 있습니다.


먼저 메인 액티비티에서 OneActivity로 갑니다. 다시 버튼을 눌러 메인 액티비티로 간 다음 TwoActivity로 가서 뒤로가기 버튼을 누르면 다음과 같은 현상이 벌어집니다.


메인 액티비티 -> 뒤로가기 누름 -> OneActivity -> 뒤로가기 누름 -> 메인 액티비티 -> 뒤로가기 두번 누름 -> 앱 종료


하지만 finish(); 를 코딩할 경우 액티비티가 완전히 종료되어서 뒤로가기 버튼을 눌러도 이전에 전환되었는 액티비티가 다시 불러오지 않습니다.


즉 저 finish(); 를 써야만 액티비티를 종료할 수 있다는 의미가 됩니다.

+ Recent posts

티스토리 툴바