반응형
Serializable 과 Parcelable로 객체 데이터 넘기고 받기
#개념
#Parcelable 이용(Parcelable을 구현한 클래스 생성)
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 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | package me.happygate.myapplication010; import android.os.Parcel; import android.os.Parcelable; //객체 데이터를 전달해주기 위해서 Parcelabe 구현 public class SimpleData implements Parcelable { int number; String message; //생성자 만들기 public SimpleData(int number, String message) { this.number = number; this.message = message; } //Parcel 데이터를 읽어서 변수에 할당 //Parcel에서 Simple 데이터 안에 들어 있는 데이터 복원 //Parcel은 데이터를 전달할 때 사용되는 객체다 public SimpleData(Parcel src){ number = src.readInt(); message= src.readString(); } //반드시 구현해야하는 변수 public static final Parcelable.Creator CREATOR = new Parcelable.Creator(){ public SimpleData createFromParcel(Parcel in){ return new SimpleData(in); } //배열 객체 만들어 주기 public SimpleData[] newArray(int size) { return new SimpleData[size]; } }; @Override public int describeContents() { return 0; } // Parcel 객체로 써준다. //SimpleData가 Parcel로 바꿔준다 @Override public void writeToParcel(Parcel dest, int flags) { dest.writeInt(number); dest.writeString(message); } } | cs |
#메인에서 데이터 던져주기
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 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | package me.happygate.myapplication010; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import java.util.ArrayList; 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) { //-----------객체 전달 방법1 Serializable---------------// //메뉴 엑티비티를 열 것이다. Intent intent = new Intent(getApplicationContext(),MenuActivity.class); //데이터 담을 그릇 배열선언 ArrayList<String> names = new ArrayList<String>(); names.add("MIKE"); names.add("JAME"); names.add("DAVID"); //데이터 전달 intent.putExtra("names",names); //-----------객체 전달 방법2 Parcelable---------------// //SimpleData 객체 만들기 SimpleData data = new SimpleData(100,"hello jone"); //원래 객체를 넣을 수 없지만 Parcelable 을 구현한 클래스로 만든 객체는 넣을 수 있음 intent.putExtra("data",data); //실행. 결과 확인 startActivityForResult(intent,101); } }); } } | cs |
#메뉴 화면에서 받기
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 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | package me.happygate.myapplication010; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import android.widget.Toast; import java.util.ArrayList; 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){ //객체 받기 방법 1 ArrayList<String> names =(ArrayList<String>)intent.getSerializableExtra("names"); if(names != null ){ Toast.makeText(getApplicationContext(),"got data list:"+ names.size(),Toast.LENGTH_SHORT).show(); } //Parcelable을 구현한 클래스로 만든 객체 받기 - 방법 2 SimpleData data = intent.getParcelableExtra("data"); if (data != null) { Toast.makeText(getApplicationContext(),"got simpledata :"+data.message,Toast.LENGTH_SHORT ).show(); } } } } | cs |
반응형
'매일코딩 > 안드로이드' 카테고리의 다른 글
[안드로이드 기초] 손가락 터치 제스쳐 이벤트 (0) | 2017.08.16 |
---|---|
[안드로이드 기초] 액티비티의 수명 주기 (0) | 2017.08.16 |
[안드로이드 기초] 인텐트로 전화걸기 기능 실행하기 (0) | 2017.08.15 |
[안드로이드 기초] 화면구성과 화면 전환(데이터 넘기기) & 인텐트 개념 (0) | 2017.08.14 |
[안드로이드 기초] inflater로 main화면에서 sub 화면 열기 (0) | 2017.08.14 |
댓글