안녕하세요 골드입니다.
오늘은 인텐트라는 것을 사용하여 다른 액티비티를 사용해 보도록 하겠습니다.
인텐트는 다수의 액티비티로 구성된 애플리케이션에서 액티비티들 간에 통신을 위해 필요한 '통신 장치' 혹은 '메시지'를 의미합니다. 인텐트는 액티비티뿐만 아니라 다양한 주요 컴포넌트들이 수행해야 할 작업에 대한 정보를 가지며 작업 결과를 반환하기 위해서도 사용됩니다.
예를 들면, 어떤 그림을 보여주어야할 때, 출력해야 하는 그림이 무엇인지 알려주기 위해서 인텐트를 사용합니다. 혹은 다른 예로 입력을 받는 액티비티를 호출한 경우에 사용자가 입력한 정보가 무엇인지 반환해야 합니다. 이런 경우에 인텐트가 사용됩니다.
저는 이번 글에서 어플리케이션에서 입력을 받고 어떤 정보를 입력받았는지 인텐트 객체를 통해 반환하는 방법에 대해서 설명할 것입니다.
1. 다른 Activity와 xml 파일 만들기
Empty Project를 만들면 MainActivity와 activity_main.xml 파일이 생깁니다.
파일명만 봤을때 두 파일은 관련이 있다는 것을 쉽게 알 수 있습니다.
저는 새로운 액티비티 파일을 SecondActivity라고 정하겠습니다.
app -> java 밑에 Activity가 들어 있는 해당 폴더를 우클릭하고 New -> Java Class 해서 새로운 Activity를 만듭니다. (뷰 방식을 Android로 하시면 파일 위치가 맞습니다.)
다음은 Activity에서 사용할 xml 파일을 만듭니다.
MainActivity - activity_main 과 비슷하게
SecondActivity - second_activity_main 으로 이름을 짓겠습니다.
res -> layout -> New -> Layout resource file 로 xml 파일을 생성합니다.
xml 파일을 클릭하고 코드 창을 엽니다.
거기에 TextView를 하나 추가합니다.
이 TextView는 나중에 MainActivity에서 보낸 String 값을 보여주기 위해 활용할 것입니다.
여러가지 속성이 있지만 여기서 중요한 속성은 id입니다.
id는 androidLid="@+id/(id값)" 으로 지정해서 사용합니다.
(id 속성값을 부여할 때 다양한 방법이 있었습니다. @+id @android:id 등등
지금은 @+id를 사용합니다.)
id값은 Activity.class 파일에서 이 TextView를 참조하기 위해 사용합니다.
2. activity_main.xml 파일 설정
먼저 activity_main.xml 파일을 열겠습니다.
저는 activity_main 파일을 감싸는 태그를 LinearLayout으로 설정했습니다.
LinearLayout의 Orientation은 Horizontal로 설정하고,
EditText와 Button을 하나씩 추가하겠습니다.
Button에서 중요한 점은 onClick 속성을 사용했다는 점입니다.
onClick 속성은 이 버튼을 클릭했을때 " " 큰 따옴표 안에 들어있는 이름과 같은 메서드를 사용하겠다는 뜻입니다. 그렇기 때문에 코드에서 이 이름과 같은 메서드를 구현해주지 않으면 에러가 발생합니다.
빨간줄이 보기 싫으니 얼른 작성해줍니다.
MainActivity의 class { } 안에 ButtonClick(혹은 본인이 작성한)이라는 이름의 메서드를 작성해줍니다.
3. MainActivity와 SecondActivity Intent 참조
그럼 이제 오늘의 메인. 두 액티비티를 이어보겠습니다.
먼저 MainActivity입니다.
맨 위에 static final 변수를 선언했습니다. static은 MainActivity가 실행되면 먼저 메모리에 적재되는 친구입니다.
MainActivity에서 선언했지만 public static이기 때문에 다른 곳에서도 참조가 가능한 친구입니다. 좋은 친구죠.
final은 값이 변하지 않는 상수라는 뜻입니다.
보통 상수값은 대문자로 선언합니다. MESSAGE 변수는 이따가 key - value 쌍에서 key를 담당하고 있습니다.
2인조 듀엣이라고 생각하면 됩니다.
onCreate 메서드를 지나서 우리가 아까 만든 ButtonClick을 보겠습니다.
Activity간에 통신을 위하여 Intent 객체를 선언합니다.
Intent(Context packageContext, class<?> cls) 생성자는 두 가지 인수를 갖습니다.
첫 번째 Context 인수는 Intent를 호출한 호출자의 정보입니다.
두 번째 cls는 호출되는 액티비티의 클래스 정보입니다.
실행 중에 Activity를 생성해야 하므로 클래스에 대한 정보가 필요합니다.
쉽게 말하면 MainActivity에서 SecondActivity로 보내는 쪽지라는 의미에서 this(MainActivity), SecondActivity.class라고 작성합니다.
다음은 우리가 xml파일에서 작성한 EditText를 참조하는 코드입니다.
EditText를 참조하고 EditText에 우리가 작성한 값을
message 변수로 가져옵니다. 대소문자에 주의하세요.
이제 intent 쪽지에 message를 적어줍니다. '난 널 좋아해'
intent.putExtra는 key - value로 작성하게 되는데 여기서 대문자 MESSAGE가 key
소문자 message가 value에 해당됩니다. 이렇게 2인조가 구성되었습니다.
마지막 줄에 startActivity를 작성하여 메세지와 함께 SecondActivity로 넘어가게 만듭니다.
SecondActivity입니다.
setContentView에 second_activity_main을 참조하는 것에 주의하세요.
MainActivity에서 보낸 intent를 getIntent로 받습니다.
message 변수를 선언하고 아까 보낸 메세지를 가져옵니다.
메세지를 가져올땐 key값을 작성해주면 해당 key에 맞는 value값이 변수에 저장됩니다.
second_activity_main.xml에서 선언한 TextView를 참조하고
textView의 text값을 message값으로 선언합니다.
마지막으로 우리가 만든 SecondActivity를 사용하겠다고 앱에 알려주는 작업이 필요합니다.
manifests 폴더에 들어가면 AndroidManifest 파일이 있습니다.
여기서 <application> 태그 안에 activity 태그를 작성해줍니다.
좋습니다.
이제 가상머신을 이용해서 앱을 실행해보겠습니다.
EditText 칸에 아무거나 적어주고 Button을 클릭합니다.
짜잔
우리가 적은 값이 전달되는 것을 볼 수 있습니다.
여기까지 골드였습니다.
감사합니다.
'Mobile > Android(Java)' 카테고리의 다른 글
[Android/java] Button Tween Animation(버튼 트윈) 만들기 (0) | 2020.02.15 |
---|---|
[Android/java] Custom GridView(그리드뷰) 사용하기 (0) | 2020.02.12 |
[Android/java] Custom ListView (안드로이드 커스텀 리스트뷰 만들기) (0) | 2020.02.11 |
[Android/java] Spinner Item list (안드로이드 스피너 사용하기) (2) | 2020.02.10 |
[Android/java] Button Click to show toast text message (버튼 클릭할 때 토스트 메세지 생성하기) (0) | 2020.02.08 |