Android Intent를 이용한 Activity간 Data 공유
안드로이드에서는 Activity간 Data 공유를 Intent라는 객체를 사용해서 구현한다. Intent는 명시적 Intent와 암시적 Intent가 있다. Intent에 대한 자세한 설명은 제외하고 이번 포스팅에서는 Intent를 사용해서 Activity간 Data 공유하는 방법을 설명한다.
PutActivity에서 이름, 나이 입력 후 Data객체 생성 후 GetActivity로 Data를 전송한다고 가정하자
1. PutActivity (데이터 전송 화면)
- Data.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | package com.woniper.example; import java.io.Serializable; public class Data implements Serializable { public String name; public int age; public Data() {} public Data(String name, int age) { this .name = name; this .age = age; } } |
- PutActivity.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | package com.woniper.example; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; public class PutActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.main); final EditText etName = (EditText)findViewById(R.id.et_name); final EditText etAge = (EditText)findViewById(R.id.et_age); Button btn = (Button) findViewById(R.id.btn); btn.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { String name = etName.getText().toString(); int age = Integer.parseInt(etAge.getText().toString()); // Data 객체 생성 Data data = new Data(name, age); // Intent에 Data객체 저장 Intent intent = new Intent(PutActivity. this , GetActivity. class ); intent.putExtra( "data" , data); // GetActivity로 Activity 전환 startActivity(intent); } }); } } |
- put_activity.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<EditText
android:id="@+id/et_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="이름을 입력해주세요."/>
<EditText
android:id="@+id/et_age"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="나이를 입력해주세요."/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="전송"
android:id="@+id/btn"/>
</LinearLayout>
2. GetActivity (데이터 받아서 처리하는 화면)
- GetActivity.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | package com.woniper.example; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.widget.TextView; public class GetActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.get_activity); // Data 객체를 받을 Intent 생성 Intent intent = getIntent(); Data data = (Data)intent.getSerializableExtra( "data" ); TextView txtName = (TextView) findViewById(R.id.txt_name); TextView txtAge = (TextView) findViewById(R.id.txt_age); // Data TextView에 적용 txtName.setText( "이름 : " + data.name); txtAge.setText( "나이 : " + String.valueOf(data.age)); } } |
- get_activity.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/txt_name"
android:textSize="30sp"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/txt_age"
android:textSize="30sp"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
3. AndroidManifest.xml (Activity 설정)
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.woniper.example"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="19"/>
<application android:label="@string/app_name" android:icon="@drawable/ic_launcher"
android:theme="@android:style/Theme.Light">
<!--Main Activity(첫화면) -->
<activity android:name="com.woniper.example.PutActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity android:name="com.woniper.example.GetActivity" />
</application>
</manifest>
Activity는 AndroidManifest.xml이라는 애플리케이션 설정 파일에 적용되어 있어야 Activity간 전환이 가능하다.
4. 화면
PutActivity화면 GetActivity화면
5. Intent Method
Type | PUT | GET | 설명 |
Object | putExtra("object", Object) | getSerializableExtra("object") | 객체 전송, 반드시 Serializable을 상속 |
String | putExtra("string", "StringType") | getStringExtra("string") | 문자열 전송 |
Integer | putExtra("int", 100) | getIntExtra("int") | int 타입 전송 |
Long | putExtra("long", 100L) | getLongExtra("long") | long 타입 전송 |
Double | putExtra("double", 100.123) | getDoubleExtra("double") | double 타입 전송 |
Boolean | putExtra("boolean", true) | getBooleanExtra("boolean") | boolean 타입 전송 |
Bundle | putExtra("bundle", Bundle) | getBundleExtra("bundle") | Bundle 객체 전송 |
Object객체와 Bundle객체를 제외하고는 기본으로 모든 DataType을 제공한다. 위 표에 제외된 Type도 있다.
출처 : https://blog.woniper.net/222?category=532432
'안드로이드 > 개발 TIP' 카테고리의 다른 글
안드로이드 비디오 재생하기 (0) | 2020.12.09 |
---|---|
이미지 선택시 번호 표시하기 (0) | 2020.12.09 |
ButterKnife 사용하기 (0) | 2020.12.09 |
구글플레이 개발자 등록하기 (0) | 2020.12.09 |
Android XML Selector 생성 및 적용하기 (0) | 2020.09.07 |
[Android] 어플리케이션 로딩화면(Splash) 구현하기 (0) | 2020.09.07 |
현재 디바이스의 언어 설정값 가져오기 (0) | 2020.04.06 |
[Firebase for android] Realtime DB를 사용한 채팅 앱 만들어보기 (0) | 2018.09.12 |