프로그래밍/안드로이드

안드로이드 인텐트를 통해서 새로운 액티비트에 데이타 전달하기

Terry Cho 2015. 8. 9. 00:41


안드로이드 인테트를 통해서 액티버티 생성하기


조대협(http://bcho.tistory.com)


요즘 일이 바쁘고 하는 역할도 바뀌어서 기술보다는 관리나 스크럼에 대한 글들을 읽고 공부하다보니, 반대적으로 기술에 대한 포스팅이 줄었다. 이래서는 안되겠다 싶어서, 어떤 부분을 봐야 할까 고민하다 보니 빅데이타와 앱 개발 기술쪽을 봐야겠다가 시작은 했는데, 막상 진도는 잘 안 나가고 있어서. 앱팀을 운영하고 있으니, 말이라도 통할려면 기본이라도 알아야 겠다 해서 안드로이드 앱쪽을 공부하고 있는데, 일단 해놓은 내용이라고 까먹지 않으려면 정리해놔야겠다는 생각에 간단하게 포스팅한다.


본 문서의 내용은 https://developer.android.com/training/index.html 를 기반으로 작성하였다. (문서에 있는데로 하면 생각보다 안되느 부분이 많다. 문서를 업데이트 하지 않아서 그런것 같은데). 

해당 프로그램은 화면에서 문자열을 입력 받아서, SEND라는 버튼을 누르면 다른 화면에서 입력 받은 문자열을 다른 화면에서 보여주는 예제이다 



MyActivity라는 액티비트에서 텍스트 박스를 통해서 문자열을 입력받고, SEND 버튼을 누르면, 텍스트 박스내의 문자열을 읽어서 Intent로 만들어서 DisplayActivity라는 액티비티로 전달하면 해당 문자열을 출력하는 내용이다.



먼저 인텐트의 개념에 대해서 이해할 필요가 있는데, 인텐트는 서로 다른 컴포넌트 간에 이벤트를 전달할 수 있는 개념이다. 위의 그림에서와 같이 MyActivity에서, DisplayActicity로 액티비티간에 출력할 문자열을 보내는것과 같은 이벤트이다. 유닉스의 IPC(Inter process call)과 같은 개념으로 생각을 하면된다. 

인텐트에 대한 자세한 내용은 https://developer.android.com/guide/components/intents-filters.html 를 참고하기 바라며, 나중에 다시 다루도록한다.


먼저, 문자열을 입력받을 화면을 작성한다. 안드로이드 스튜디오에서, 다음과 같은 레이아웃으로 작성을 한다. 



다음으로 버튼을 눌렀을때, 인텐트를 만들어서 보내기 위해서 버튼을 눌렀을때 실행되는 메서드를 정의하여 버튼 이벤트와 연결한다.

    public void sendMessage(View view){


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

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


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

        intent.putExtra("com.example.terry.basicintentsample.MESSAGE",message);

        startActivity(intent);

    }


이 메서드는 새로운 인텐트를 생성하여 DisplayActivity라는 액티비티 클래스로 보내지는 인텐트가 된다.

인텐트를 통해서 보내지는 데이타는 “com.example.terry.basicintentsample.MESSAGE” 문자열을 키로 해서, EditText 텍스트 문자열 박스에서 읽어도 문자열을 값으로 해서 putExtra메서드를 이용해서 인텐트에 바인딩 된다. 

이 인텐트는 startActivity를 통해서 DisplayActivity 액티비티를 새롭게 시작하면서 같이 전달이 된다. 

위와 같이 코드를 작성하여,액티버티 뷰를 정의한 activity_my.xml에서 다음과 같이 버튼이 눌렀을때 작성한 “sendMessage”메서드가 호출되도록 정의 한다.

        <Button

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:text="SEND"

            android:id="@+id/button"

            android:layout_weight="1"

            android:onClick="sendMessage" /


인텐트를 만들어서 보내는 부분이 끝났으면, 이제 인텐트를 받아서 출력하는 부분을 구현해보도록 하자.

안드로이드 스튜디오에서,  새로운 액티비티를 생성한다.




생성된 액티비티에는 간단하게, “myMessage”라는 아이디로 TextView 하나만 배치 시킨다.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"

    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"

    android:paddingRight="@dimen/activity_horizontal_margin"

    android:paddingTop="@dimen/activity_vertical_margin"

    android:paddingBottom="@dimen/activity_vertical_margin"

    tools:context="com.example.terry.basicintentsample.DisplayActivity">


    <TextView android:text="@string/hello_world" android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:id="@+id/myMessage" />


</RelativeLayout>


다음으로 OnCreate 메세지에 다음과 같은 코드를 추가한다.

    @Override 

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);


        // Render View first

        setContentView(R.layout.activity_display);


        // Get the message from the intent

        Intent intent = getIntent();

        String message = intent.getStringExtra("com.example.terry.basicintentsample.MESSAGE");

        TextView textView = (TextView)findViewById(R.id.myMessage);

        textView.setText(message);


    }

위의 코드는 인텐트에서 문자열을 받아서 “myMessage”라는 id의 텍스트 뷰에 그 문자열을 출력하는 코드이다.

출력전에, setContentView를 먼저 호출해야 하는데, View를 렌더링한 후에 myMessage TextView가 생성된다. 

다음으로 getIntent() 메서드를 이용하면, 인텐트를 받을 수 있고, getStringExtra메서드를 이용해서 “com.example.terry.basicintentsample.MESSAGE” 키로 문자열을 받아서 TextView에 setText로 세팅한다.




그리드형