반응형

 이전 포스트의 내용을 완료하고 나면 여러분은 하나의 텍스트필드(EditText) 와 하나의 버튼을 가지고 있는 액티비티(한 화면)를 보여주는 앱이 있습니다. 이번 시간에, 여러분은 사용자가 Send 버튼을 클릭했을 때 새로운 액티비티를 실행하도록 하기 위해 MyActivity 에 몇가지 코드를 추가할 것입니다. 

 

Send 버튼에 응답하기

-----------------------

 안드로이드 스튜디오에서, res/layout  디렉토리의 activity_my.xml 파일을 작성합니다.

<Button> 요소에 android:onClick 속성을 추가합니다.

 

 res/layout/activity_my.xml

 <Button

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/button_send"

android:onClick="sendMessage" />

 

 

 android:onClick 속성의 값, "sendMessage", 는 사용자가 버튼을 클릭했을때 시스템이 호출하는 액티비티안에 있는 메소드의 이름입니다.

 java/com.mycompany.myfirstapp 디렉토리안에 MyActivity.java 파일을 열겠습니다.

 MyActivity 클래스 안에 아래 보여지는 sendMessage() 를 추가합니다.

 

java/com.mycompany.myfirstapp/MyActivity.java

 /** Called when the user clicks the Send button */

 public void sendMessage(View view) {

     // Do something in response to button

 }

 

 

시스템이 호출을 하기 위해서는 android:onClick 속성에 주어졌던 메소드의 이름과 같아야 합니다. 이 메소드는 작성 방식이 반드시 위해 보여진 것과 정확히 맞아야 합니다. 

° 접근제한자는 public 이어야만 함

° 리턴타입은 void 이어야 함

° 파라미터는 오직 View 만 가능함(클릭된 View 입니다)

 

다음으로, 여러분은 텍스트필드(EditText)의 내용물을 읽고 이를 다른 액티비티에 전달하기 위해 이 메소드를 채우게 됩니다.

 

인텐트(Intent) 만들기

----------------------------

1. MyActivity.java 파일의 sendMessage() 메소드 안쪽에 DisplayMessageActivity 라고 불려지는 액티비티를 실행하기 위해 하나의 아래의 코드를 따라 Intent 를 만들어 냅니다.

 

java/com.mycompany.myfirstapp/MyActivity.java

 public void sendMessage(View view) {

     Intent intent = new Intent(this, DisplayMessageActivity.class);

 }

 

Note : 만약 여러분이 Android Studio 같은 IDE를 사용한다면, DisplayMessageActivity 에 에러가 나타날 겁니다. 왜냐하면, 아직 이 클래스가 존재하지 않기 때문입니다. 지금은 이 에러를 무시하세요. 곧 이 클래스 만들 겁니다.

 

생성자는 두개의 파라미터를 사용하고 있습니다.

° 첫 번째 파라미터 : Context ( this 라고 쓴 이유는 Activity가 Context 의 서브 클래스 이기 때문입니다.)

° 두 번째 파라미터 : 시스템이 Intent 를 전달하기 위한 앱 컴포넌트 클래스

 

 

 Intent

 인텐트는 실행할 때 서로 다른 컴포넌트(두개의 액티비티 같은)를 사이를 연결하는 객체입니다. 인텐트는 앱의 "무언가를 하기 위한 의도" 를 나타냅니다. 여러분은 광범위하고 다양한 작업들에 인텐트들을 사용할 수 있습니다. 하지만 대부분 인텐트들은 다른 액티비티를 실행하는 용도를 사용하게 됩니다. 추가적인 정보를 알고 싶다면, 개발자 사이트의 Intent and Intent Filters 를 보시기 바랍니다. 

 

 

안드로이드 스튜디오는 여러분이 반드시 Intent 클래스를 import 하도록 표시합니다.

 

 

2. 파일의 가장 위에 Intent 클래스를 import 합니다.

 

java/com.mycompany.myfirstapp/MyActivity.java

  import android.content.Intent;

 

Tip: Android Studio에서 Alt+Enter(Mac 에서는 option+return) 을 누르면 자동으로 필요한 클래스를 import 합니다.

 

 

3. sendMessage() 메서드 안쪽에 findViewById() 를 사용하여 EditText 요소를 얻어옵니다.

 

java/com.mycompany.myfirstapp/MyActivity.java

 

  public void sendMessage(View view) {

     Intent intent = new Intent(this, DisplayMessageActivity.class);

     EditText editText = (EditText)findViewById(R.id.edit_message);

 }

 

 파일의 가장 위에 EditText 클래스를 임포트 하세요.

Android Studio에서 자동으로 필요한 클래스를 import 하기위해 Alt+Enter(Mac 에서는 option+return) 을 누르세요.

 

text를 message 지역변수에 할당합니다. 그리고 putExtra() 메소드를 사용하여 인텐트에 텍스트 값을 추가합니다.

 

java/com.mycompany.myfirstapp/MyActivity.java

 public void sendMessage(View view) {

     Intent intent = new Intent(this, DisplayMessageActivity.class);

     EditText editText = (EditText)findViewById(R.id.edit_message);

     String message = editText.getText().toString();

     intent.putExtra(EXTRA_MESSAGE, message);

 }

 

 

인텐트는 extra 라고 불려지는 key-value 쌍의 data 타입을 전달 할 수 있습니다. putExtra() 메소드는 첫번째 파라미터로 키 이름을, 두번째 파라미터로 을 가집니다.

 

 

6. MyActivity 클래스의 위쪽에 아래 처럼 EXTRA_MESSAGE 상수 정의를 추가합니다.

 

java/com.mycompany.myfirstapp/MyActivity.java

 public class MyActivity extends ActionBarActivity{

     public final static string EXTRA_MESSAGE = "com.mycompay.myfirstapp.MESSAGE";

     ...

}

 

 

 다음 액티비티에서 extra 데이터를 얻기위해, 여러분은 public 상수를 사용하여 인텐트의 extras에 대한 키를 정의 해야만 합니다.

위에 처럼 접두어로 앱의 패키지 이름을 사용하여 인텐트의 extra 키를 정의하는 것은 일반적으로 좋은 습관입니다. 이 방식은 다른 앱에서 여러분의 앱을 추출했을 때 유일한 식별자라는 것을 보증합니다.

 

 

7. 인텐트의 마지막 작업으로, sendMessage() 메소드 안에 스텝1에서 만들었던 인텐트 객체를 startActivity()메소드 호출하여 전달합니다.

 

 이 코드를 추가하여 아래 보이는 것처럼 Send 버튼에 의해 발동된 sendMessage() 메소드를 완성합니다.

 

java/com.mycompany.myfirstapp/MyActivity.java

public void sendMessage(View view) {

     Intent intent = new Intent(this, DisplayMessageActivity.class);

     EditText editText = (EditText)findViewById(R.id.edit_message);

     String message = editText.getText().toString();

     intent.putExtra(EXTRA_MESSAGE, message);

     startActivity(intent);

 }

 

 시스템은 이 메소드를 호출 받으면 Intent에 지정된 Activity 의 인스턴스를 시작합니다.

이제 여러분은 이 작업을 위해 DisplayMessageActivity 클래스를 만들 필요가 있습니다.

 

 다음 포스트에서 이어합니다.

반응형

+ Recent posts