일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 막내의 막무가내
- 주택가 잠실새내
- 막내의막무가내 SQL
- 안드로이드
- Fragment
- 프로그래머스 알고리즘
- 막내의막무가내 알고리즘
- 프래그먼트
- 막내의막무가내 목표 및 회고
- 막내의막무가내 코틀린
- 막내의막무가내 코틀린 안드로이드
- 안드로이드 Sunflower 스터디
- 막내의막무가내 안드로이드 코틀린
- 막내의막무가내 프로그래밍
- 부스트코스에이스
- 막내의막무가내 코볼 COBOL
- 막내의 막무가내 알고리즘
- 막내의막무가내 일상
- 막내의막무가내 안드로이드
- 막내의막무가내
- 막내의막무가내 플러터 flutter
- 막내의막무가내 rxjava
- 부스트코스
- 2022년 6월 일상
- 막무가내
- 막내의막무가내 안드로이드 에러 해결
- 안드로이드 sunflower
- flutter network call
- 막내의막무가내 플러터
- 주엽역 생활맥주
- Today
- Total
막내의 막무가내 프로그래밍 & 일상
[안드로이드] ArrayList , 사용자가 만든 객체 부가 데이터 전달 예제 본문
ArrayList나 사용자가 만든 객체를 액티비티끼로 서로 전달하고 받는 과정을 예제로 기록해본다.
기본타입이 아닌 리스트 또는 객체를 받아올때 단순 get000Extra로 받아올 수 가 없다.
*메인액티비티( ArrayList 값과 SimpleData라는 내가 만든 객체를 전달해준다. intent.putExtra로 기본타입과 보내는 방식은 똑같으나 받는 방식이 나중에 보면 다르다. )
Intent intent = new Intent(getApplicationContext(), MenuActivity.class);
ArrayList<String> names = new ArrayList<String>();
names.add("김진수");
names.add("황수연");
intent.putExtra("names", names);
SimpleData data = new SimpleData(100, "Hello");
intent.putExtra("data", data);
startActivityForResult(intent, 101);
*SimpleData ( 사용자가 만든 객체를 데이터로 전달하기위해서는 Parcelable을 구현해야 한다. 실제로 Paracelable을 사용해서 데이터전달을 많이 한다고 들었다. 왜냐하면 Serializable 보다 더 성능이 좋기 때문이다.
해당 설명은 https://youngest-programming.tistory.com/108 에 정리해놨다.)
밑에처럼 직접 구현해도 되고
Parcelable code generator플러그인을 다운 받아서 윈도우기준 알트엔터(generater)로 자동으로 만들 수 도 있다. (난 이것을 추천하고 사용하고있다.)
public class SimpleData implements Parcelable {
int number;
String message;
public SimpleData(int number, String message) {
this.number = number;
this.message = message;
}
public SimpleData(Parcel src) {
number = src.readInt();
message = src.readString();
}
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];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(number);
dest.writeString(message);
}
}
*메뉴액티비티(데이터를 전달 받을 다른액티비티)
=> ArrayList는 Sierializable가 기본적으로 implements이 되있어서 getSerializableExtra를 이용해 전달받은 데이터를 꺼내올 수 있다.
그리고 내가 만든 객체인 SimpleData Parcelable을 구현했으니 getPaecelableExtra를 사용해서 받아올 수 있다.
//메인엑티비티에서 전달된 인텐트가 여기저장됨
Intent passedIntent = getIntent();
processIntent(passedIntent);
private void processIntent(Intent intent){
if(intent!=null){
//인텐트에서 엑스트라데이터가 들어가있으니깐 엑스트라데이터를얻어옴
//여기선 getExtra가아닌 getSerial로 해서 아까 ArrayList를 구현한거를 빼올수있음
// (ArrayList가 Serializable을 implements 했으므로 가능
//즉 한가지데이터가아닌 이런 자료구조나 객체를 전달받을떄 사용함
ArrayList<String> names = (ArrayList<String>) intent.getSerializableExtra("names");
if(names != null){
Toast.makeText(getApplicationContext(), "전달받은 이름 리스트 갯수 : " + names.size(), Toast.LENGTH_LONG).show();
}
SimpleData data = intent.getParcelableExtra("data");
if(data != null){
Toast.makeText(getApplicationContext(), "전달받은 심플데이터 : " + data.message, Toast.LENGTH_LONG).show();
}
}
}
'
[2020 업데이트] 다음과 같이 어노테이션으로 쉽게 Parcel 설정이 가능합니다.
@Parcelize
data class User(
var id: String = "",
var name: String = "",
var fcm: String = "",
var email: String = "",
var pw: String = "",
var image: String = ""
) : Parcelable
좋은 추가 예제 및 설명 사이트 : https://developer88.tistory.com/64
: https://www.edwith.org/boostcourse-android/lecture/17066/
'안드로이드 > 자바 & Previous' 카테고리의 다른 글
[안드로이드] 인터넷 연결 상태 확인하는 방법 및 간단예제(2020) (2) | 2019.03.28 |
---|---|
[안드로이드] SQLiteDatabase와 SQLiteOpenHelper 사용법 예제 (2) | 2019.03.28 |
[안드로이드] Bundle 간단 사용 예제 및 방법 ( 액티비티 프래그먼트 데이터전달 ) (1) | 2019.03.22 |
[안드로이드] Glide 라이브러리 간단한 사용방법 + 비트맵으로받기 (0) | 2019.03.22 |
[안드로이드] 기억노트 필기 - 리싸이클러뷰 정리 (0) | 2019.03.21 |