티스토리 뷰
인텐트로 전달사용 예제
1 2 3 4 5 6 7 8 9 | 1. Exapmle_Parcelable 프로젝트 생성 2. App -> new -> Activity -> MenuActivity의 이름으로 생성 3. 메니페스트 파일안에 -> MenuActivity 파일이 자동으로 추가 된다는것을 알아야한다. 4. activity_main.xml 에 Button 추가 "메뉴 엑티비티 띄우기" 5. MainActivity.java에 코드 추가 | cs |
123456789101112131415161718192021222324252627282930313233343536373839404142 package com.example.example_parcelable;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 {@Overrideprotected 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 // 버튼클릭시 onClick 메소드가 실행되도록 한다public void onClick(View v) {Intent intent = new Intent(getApplicationContext(), MenuActivity.class);// 배열형식 선언ArrayList<String> names = new ArrayList<String>(); //names.add("홍길동");names.add("KGH");intent.putExtra("names",names); // 인텐트를 메뉴엑티비티에 전달 ,MenuActivity쪽에서는 getIntent() 선언startActivityForResult(intent, 101);}});}}cs
1 2 3 4 5 | 6. activity_menu.xml 파일로 이동 - 버튼 생성( "돌아 가기") 생성 7. MenuActivity.java 파일로 이동 해서 코드 작성 설명 같이 첨부 | cs |
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 package com.example.example_parcelable;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 {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_menu);Button button2 = (Button)findViewById(R.id.button2);button2.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {finish(); // 이전에 있던 메인화면이 나타나게 된다.}});// 메뉴엑티비티가 맨처음 뜨게 되면 onCreate가 호출 되는데, 값을 받아오고 싶으면 getIntent() 메소드 사용한다.Intent passedIntent = getIntent();// 메인 엑티비티로 부터 값을 받아온다.proccessIntent(passedIntent);// proccessIntent 라는 메소드를 만들고 전달 받고 여기 메소드에서 처리하게 만든다.}// 받아온 인텐트 값 처리하기 위한 메소드 생성private void proccessIntent(Intent intent) {if(intent != null ){// 시리얼 라이즈는 많이 무겁다.ArrayList<String> names = (ArrayList<String>)intent.getSerializableExtra("names");// 시리얼라이저블을 넣고 뺄 수 있다.// 이때 implement 하기때문에 값을 넣고 뺄 수 있음. names는 아까 그 names의 값을 빼낼 수 있다.if(names != null){Toast.makeText(getApplicationContext(),"전달받은 이름 리스트 개수" + names.size(),Toast.LENGTH_LONG).show();// 이름 리스트 개수를 출력 시키는 역할}}}}cs
1 | 보통 parcelable을 잘 사용하진않지만 , 실제로는 많이 쓰인다. | cs |
최종 화면)
Parcelable 예제 작성하기
1 2 3 4 5 6 7 8 | 1.Parcelable 정의 하기 위해서는 클래스의 인터페이스를 구현해야 한다. 2. app -> java -> package선택 -> new 자바 클래스 -> 이름: SimpleData , kind : class선택하고, interface(s) : android.os.Parcelable 입력하면 -> 클래스자동으로 생성 된다. 3. SimpleData 파일에 class 가 자동으로 입력된것을 볼 수 있다. 4. 이때 public class에서는 오류가 발생하는데 , 오른쪽 마우스 -> generate를 눌러서 아직 구현이 안된 메소드를 자동으로 추가 해준다. | cs |
123456789101112 public class SimpleData implements Parcelable {@Overridepublic int describeContents() {return 0;}@Overridepublic void writeToParcel(Parcel dest, int flags) {}}cs
1 2 3 4 | 5. 이때, 또 CREATOR 가 없다고 나온다. 변수를 따로 선언 해준다 int,String 타입으로 6. 그러면 이제 int,String 의 생성자를 만들수 있다. 오른쪽 마우스 -> generate -> construct -> 생성자 두개 생성을 자동으로 해준다. | cs |
1234567 int number;String message;public SimpleData(int number, String message) {this.number = number;this.message = message;}cs
1 2 3 | 7. 이때, 또다른 파라미터가 들어왔을 경우 처리를 위하여 생성자 오버로딩을 실시한다, 생성자 오버로딩이란? 같은 이름의 메소드에서, 파라미터의 값과 타입이 다른 메소드를 다시 정의할 수 있는것을 의미한다.(return type X) | cs |
123456 // 데이터가 들어가있는것을 말한다.public SimpleData(Parcel src){number = src.readInt(); // Integer 타입을 받아 할당 받겠다.message = src.readString();}cs
8. SimpleData.java 파일의 최종 코드
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 package com.example.example_parcelable;import android.os.Parcel;import android.os.Parcelable;/*** Created by kgh on 2017-09-21.*/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(); // Integer 타입을 read 받아 할당 받겠다.message = src.readString();}public static final Parcelable.Creator CREATOR = new Parcelable.Creator(){// parcelable 을 쓰게 되면 CREATOR 객체를 꼭 선언 해주어야 한다.public SimpleData createFromParcel(Parcel src){return new SimpleData(src);}public SimpleData[] newArray(int size){return new SimpleData[size];}};@Overridepublic int describeContents() {return 0;}@Overridepublic void writeToParcel(Parcel dest, int flags) {dest.writeInt(number);dest.writeString(message);}// 이렇게 완성된 Parcelable을 인터페이스를 구현 한것을 볼 수 있다. 이제 이것을 가지고// Parcelable 을 사용이 가능하다.}cs
1 2 | => 결국 이것은 Parcelable의 인터페이스를 구현한것이므로 다른 java파일에서도 이 인터에피스 기본틀을 이용해서 Parcelable을 사용할 수 있다. | cs |
9. Parcelable을 사용한 최종 main.java
12345678910111213141516171819202122232425262728293031323334353637383940414243444546 package com.example.example_parcelable;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 {@Overrideprotected 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 // 버튼클릭시 onClick 메소드가 실행되도록 한다public void onClick(View v) {Intent intent = new Intent(getApplicationContext(), MenuActivity.class);// 배열형식 선언ArrayList<String> names = new ArrayList<String>(); //names.add("홍길동");names.add("KGH");intent.putExtra("names",names); // 인텐트를 메뉴엑티비티에 전달 ,MenuActivity쪽에서는 getIntent() 선언// 이제 Parcelable을 사용이 가능 하다 밑에 코드가 parcelable 코드SimpleData data = new SimpleData(100,"Hello");intent.putExtra("data",data); // 데이터를 받아서 사용이 가능하다.startActivityForResult(intent, 101);}});}}cs
10. Parcelable을 사용한 menu.java
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 package com.example.example_parcelable;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 {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_menu);Button button2 = (Button)findViewById(R.id.button2);button2.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {finish(); // 이전에 있던 메인화면이 나타나게 된다.}});// 메뉴엑티비티가 맨처음 뜨게 되면 onCreate가 호출 되는데, 값을 받아오고 싶으면 getIntent() 메소드 사용한다.Intent passedIntent = getIntent();// 메인 엑티비티로 부터 값을 받아온다.proccessIntent(passedIntent);// proccessIntent 라는 메소드를 만들고 전달 받고 여기 메소드에서 처리하게 만든다.}// 받아온 인텐트 값 처리하기 위한 메소드 생성private void proccessIntent(Intent intent) {if(intent != null ){// 시리얼 라이즈는 많이 무겁다.ArrayList<String> names = (ArrayList<String>)intent.getSerializableExtra("names");// 시리얼라이저블을 넣고 뺄 수 있다.// 이때 implement 하기때문에 값을 넣고 뺄 수 있음. names는 아까 그 names의 값을 빼낼 수 있다.if(names != null){Toast.makeText(getApplicationContext(),"전달받은 이름 리스트 개수" + names.size(),Toast.LENGTH_LONG).show();// 이름 리스트 개수를 출력 시키는 역할}//Parcelable 부분SimpleData data = (SimpleData) intent.getParcelableExtra("data");// parcelable을 구현한 simple data가 있다는것을 의미, "data" 키값if(data != null){Toast.makeText(getApplicationContext(),"전달받은 이름 리스트 개수" + data.message,Toast.LENGTH_LONG).show();}}}}cs
최종 화면
'Android' 카테고리의 다른 글
[Android] 수명주기에 따른 상태 변화 (0) | 2017.09.22 |
---|---|
[Android] 액티비티의 생명주기 (0) | 2017.09.22 |
[Android] 액티비티를 위한 플래그와 부가 데이터 (0) | 2017.09.21 |
[Android] 인텐트 살펴보기 (0) | 2017.09.21 |
[Android]화면 구성과 화면 간 전환(인텐트) (0) | 2017.09.21 |
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- MVC
- Android
- 코드엔진
- Algorigm
- 프로그래밍
- 노드
- 학교
- 감자코딩
- Spring
- 알고리즘
- node
- C langauge
- 리버싱
- Controller
- programming
- 감자개발자
- 백준알고리즘
- BFS
- 복습
- 초보자를 위한 C언어 300제
- 스프링
- C언어
- 개발하는 관광이
- 안드로이드
- 머신러닝
- node.js
- 텐서플로우
- TensorFlow
- 백준
- db
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함