1. 부가데이터란?
추가 정보를 전달하고 싶을 때 인텐트 안에 데이터를 넣어서 전달할 때의 데이터를 의미
- 전달 할 부가 데이터의 양이 너무 많을때는? Parcelable 이용 : Bundle(객체)을 전달
2. 플래그란?
인텐트에 일종의 옵션 정보를 넣어주는 것
플래그가 있으면 특정 이벤트를 특정 방법으로 처리
3. 액티비티 스택
- 스택 : 후입선출
cf) 큐 : 선입선출
4. 액티비티에서 인텐트를 전달 받는 두가지 경우
- onCreate : 콜백 함수
- 액티비티 재사용 하는 경우에는 onCreate 메소드 호출 X > onNewIntent 라는 메소드를 호출
5. 예제 코드
- MainActivity에서 "메뉴화면 띄우기" 누르면 MenuActivity가 나온다.
- MenuActivity에서 "돌아가기" 누르면 MainActivity로 돌아가고 + 전달 받은 데이터 개수를 토스트 메시지로 알려준다.
* Serializable 사용하는 경우
(1) app > new > activity > MenuActivity 생성
(2) MainActivity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getApplicationContext(), MenuActivity.class);
ArrayList<String> names = new ArrayList<String>();
names.add("김철수");
names.add("김펭수");
// 인텐트 안에 부가 데이터 넣기
intent.putExtra("names", names);
// 응답을 받고 싶을 경우
startActivityForResult(intent, 101);
}
});
}
(3) MenuActivity.java
public class MenuActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_menu);
Button button2 = (Button) findViewById(R.id.button2);
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 메인 화면으로 돌아가기
finish();
}
});
Intent passedIntent = getIntent();
processIntent(passedIntent);
}
private void processIntent(Intent intent) {
if (intent != null) {
ArrayList<String> names = (ArrayList<String>) intent.getSerializableExtra("names");
if (names != null) {
Toast.makeText(getApplicationContext(), "전달 받은 이름 리스트 개수 : " + names.size(), Toast.LENGTH_LONG).show();
}
}
}
}
* Parceable 사용하는 경우
(1) java > class > SimpleData (Kind : class, Interface : Parcelable) 생성
(2) MainActivity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getApplicationContext(), MenuActivity.class);
// Parcel로 만든 데이터를 받음
SimpleData data = new SimpleData(100, "Hello");
intent.putExtra("data", data);
// 응답을 받고 싶을 경우
startActivityForResult(intent, 101);
}
});
}
}
(3) MenuActivity.java
public class MenuActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_menu);
Button button2 = (Button) findViewById(R.id.button2);
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 메인 화면으로 돌아가기
finish();
}
});
Intent passedIntent = getIntent();
processIntent(passedIntent);
}
private void processIntent(Intent intent) {
SimpleData data = (SimpleData) intent.getParcelableExtra("data");
if (data != null) {
Toast.makeText(getApplicationContext(), "전달 받은 SimpleData : " + data.message, Toast.LENGTH_LONG).show();
}
}
}
}
(4) SimpleData.java
public class SimpleData implements Parcelable {
int number;
String message;
// Generate > Constructor
public SimpleData(int number, String message) {
this.number = number;
this.message = message;
}
// Parcel : 데이터를 다른 곳에 전달할 때 사용하는 객체
public SimpleData(Parcel src) {
number = src.readInt();
message = src.readString();
}
// Generate > Implement Methods
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(number);
dest.writeString(message);
}
// CREATOR Field 정의
public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
public SimpleData createFromParcel(Parcel src) {
return new SimpleData(src);
}
public SimpleData[] newArray(int size) {
return new SimpleData[size];
}
};
}
'Android' 카테고리의 다른 글
[Android] 안드로이드 : 서비스 (0) | 2019.12.10 |
---|---|
[Android] 안드로이드 : 액티비티 수명주기 (0) | 2019.12.10 |
[Android] 안드로이드 : 인텐트(Intent) (0) | 2019.12.05 |
[Android] 안드로이드 : 화면 구성과 화면 간 전환 (0) | 2019.12.05 |
[Android] 안드로이드 : 그리드뷰 사용하기 (0) | 2019.12.04 |
댓글