Android 애플리케이션에서 "번들"이란 무엇입니까


답변:


278

번들은 일반적으로 다양한 Android 활동간에 데이터를 전달하는 데 사용됩니다. 전달하려는 값의 유형에 따라 다르지만 번들은 모든 유형의 값을 보유하고 새 활동에 전달할 수 있습니다.

다음과 같이 사용할 수 있습니다.

Intent intent = new...
Intent(getApplicationContext(), SecondActivity.class);
intent.putExtra("myKey", AnyValue);  
startActivity(intent);

다음을 수행하여 전달 된 값을 얻을 수 있습니다.

Bundle extras = intent.getExtras(); 
String tmp = extras.getString("myKey");

자세한 정보는 다음에서 찾을 수 있습니다.


3
왜 System.object를 직접 사용하고 캐스팅하지 않습니까?
lovespring

79

BundleIntent객체 를 사용하여 활동간에 데이터를 전달하십시오 .


첫 번째 Bundle개체 만들기

Bundle b = new Bundle();

그런 다음 저장된 문자열 데이터 anystring를 번들 키와 연결하십시오."myname"

b.putString("myname", anystring);

이제 Intent객체를 만듭니다

Intent in = new Intent(getApplicationContext(), secondActivity.class);

번들 객체 b를 의도로 전달

in.putExtras(b);

두 번째 활동을 시작합니다

startActivity(in);

두 번째 활동에서는 첫 번째 활동에서 전달 된 데이터에 액세스해야합니다.

Intent in = getIntent();

이제 번들에서 데이터를 가져와야합니다.

Bundle b = in.getExtras();

마지막으로 키와 관련된 문자열 데이터의 값을 얻습니다. "myname"

String s = b.getString("myname");

이것은 정말 좋은 verbose 답변입니다.
Abhishek Garg

68

나중에 번들이 데이터를 자신에게 전달하기 위해 활동에서 사용한다고 덧붙여 야합니다.

화면이 회전하거나 다른 활동이 시작되면 메소드 protected void onSaveInstanceState(Bundle outState)가 호출되고 활동이 삭제됩니다. 나중에 활동의 다른 인스턴스가 작성 public void onCreate(Bundle savedInstanceState)되어 호출됩니다. 활동의 첫 번째 인스턴스가 작성되면 번들은 널입니다. 번들이 널이 아닌 경우 활동은 이전 작업에 의해 시작된 일부 비즈니스를 계속합니다.

Android는 텍스트를 텍스트 필드에 자동으로 저장하지만 모든 것을 저장하지는 않으며 미묘한 버그가 나타나는 경우도 있습니다.

그러나 가장 일반적인 안티 패턴은 onCreate()초기화 만 가정합니다 . 상태도 복원해야하므로 잘못되었습니다.

이 "회전시 활동 재 작성"동작을 비활성화하는 옵션이 있지만 다시 시작 관련 버그를 방지하지는 않으며 언급하기가 더 어려워집니다.

또한 활동이 소멸 될 때 호출이 보장되는 유일한 메소드는 onPause()입니다. (문서의 활동 수명주기 그래프를 참조하십시오.)


매핑 만 사용할 수 있는데 왜 번들을 사용합니까? 고마워 테드!
Ruchir Baronia

4
번들은 Activity에서만 사용되지 않습니다. 회전 후 상태를 유지하기 위해 Fragment에서도 사용됩니다.
Kai Wang

47

A Bundle는 키를 값에 Map매핑 하는 Java 객체 와 매우 유사 String합니다. 활동과 다른 애플리케이션 구성 요소간에 정보를 전달하는 데 사용됩니다. 또한 상태 정보를 캡처하고 복원하기 위해 프레임 워크에서 사용됩니다.

안드로이드가 평범한 오래된 Map객체를 사용하지 않는 이유 Map는 너무 유연하기 때문입니다. 직렬화 할 수없는 객체 (예 : I / O 스트림)를 포함 할 수 있습니다. BundleAPI는 번들의 내용을 직렬화 보장하는 것과 같은 방식으로 번들에 추가 할 수있는 개체의 유형을 제한합니다. Android 프레임 워크는이 특성에 의존합니다.

Application Fundamentals 에 대한 설명서를 읽는 것이 좋습니다 . 이것은 무엇보다도 번들과 의도가 무엇인지, 그리고 용도가 무엇인지 설명합니다.


14

번들은 의도를 통해 한 활동에서 다른 활동으로 임의의 데이터를 전송하는 데 사용될 수 있습니다. 인 텐트를 브로드 캐스트하면 관심있는 활동 (및 다른 브로드 캐스트 수신자)에게이를 알립니다. 인 텐트에는 번들을 포함 할 수 있으므로 인 텐트와 함께 추가 데이터를 보낼 수 있습니다.

번들은 키-값 매핑이므로 해시와 비슷하지만 단일 String / Foo 객체 매핑으로 엄격하게 제한되지는 않습니다. 특정 데이터 유형 만 "소포 가능"으로 간주되며 번들 API에서 명시 적으로 철자됩니다.


이것은 OP의 질문에 실제로 접근 할 수있는 유일한 대답입니다. 즉 번들이란 무엇입니까? stackoverflow.com/a/6236801/1588163 는 더 많은 통찰력을 제공합니다.
clapas

매핑 만 사용할 수 있는데 왜 번들을 사용합니까? 감사!
Ruchir Baronia

@RuchirBaronia 번들 오브젝트가 필요한 Android API의 일부로 번들을 전달하지 않는 한 번들을 사용해야하는 특별한 이유가 없습니다.
scriptocalypse

8

번들을 만들면됩니다.


Bundle simple_bundle=new Bundle();
simple_bundle.putString("item1","value1");
Intent i=new Intent(getApplicationContext(),this_is_the_next_class.class);
i.putExtras(simple_bundle);
startActivity(i);

"this_is_the_next_class.class"에서

이와 같은 항목을 검색 할 수 있습니다.

Intent receive_i=getIntent();
Bundle my_bundle_received=receive_i.getExtras();
my_bundle_received.get("item1");
Log.d("Value","--"+my_bundle_received.get("item1").toString);

5

번들은 활동간에 데이터를 전달하는 데 사용됩니다. 번들을 작성하여 인 텐트로 전달하여 활동을 시작한 다음 대상 활동에서 사용할 수 있습니다.


3

번들 :-문자열 값에서 다양한 Parcelable 유형으로의 매핑.

번들은 일반적으로 안드로이드의 다양한 활동간에 데이터를 전달하는 데 사용됩니다.

onPause ()를 호출 한 다음 onStop ()을 호출 한 다음 onStop ()을 onPause ()로 역순으로 호출합니다.

시스템이 이전 상태를 복원하는 데 사용하는 저장된 데이터를 "인스턴스 상태"라고하며 번들 오브젝트에 저장된 키-값 쌍의 콜렉션입니다.


매핑은 번들의 특성입니다.
BollMose

2

번들은 활동간에 데이터를 공유하고 oncreate () 메소드에서 앱의 상태를 저장하여 앱이 중지 된 위치를 알 수 있도록하는 데 사용됩니다 ... 도움이되기를 바랍니다.)


0

의도 객체를 사용하여 번들을 사용하여 한 활동에서 다른 활동으로 데이터를 보냅니다. 번들은 모든 유형이 될 수있는 데이터를 보유합니다.

이제 두 활동 사이에 데이터를 전달하는 번들을 만드는 방법을 알려줍니다.

1 단계 : 첫 활동

Bundle b=new Bundle();

b.putString("mkv",anystring);

Intent in=new Intent(getApplicationContext(),secondActivity.class);

in.putExtras(b);

startActivity(in);

2 단계 : 두 번째 활동

Intent in=getIntent();

Bundle b=in.getExtras();

String s=b.getString("mkv");

나는 이것이 당신에게 유용하다고 생각합니다 ............


0

번들은 서로 다른 두 구성 요소간에 데이터를 전송하는 것뿐만 아니라 활동이 새로운 활동으로 파괴되기 전에 저장된 값을 복원하는 데 사용됩니다.

이러한 텍스트 등 EditText위젯 또는 스크롤의 위치 ListView.


0

첫 활동 :

String food = (String)((Spinner)findViewById(R.id.food)).getSelectedItem();
RadioButton rb = (RadioButton) findViewById(R.id.rb);
Intent i = new Intent(this,secondActivity.class);
i.putExtra("food",food);
i.putExtra("rb",rb.isChecked());

두 번째 활동 :

String food = getIntent().getExtras().getString("food");
Boolean rb = getIntent().getExtras().getBoolean("rb");

1
최소, 완전 및 검증 가능한 예 에 대해 배우고 싶을 수도 있습니다 .
Daniel Corzo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.