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 |
댓글