2011-02-15 96 views

回答

225

Bundles通常用於在各種Android活動之間傳遞數據。它取決於你想要傳遞什麼類型的值,但bundle可以保存所有類型的值並將它們傳遞給新的活動。

您可以使用它像這樣:

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

您可以通過執行獲得傳遞的值:

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

你可以找到更多的信息:

5

Bundle用於在活動之間傳遞數據。您可以創建一個捆綁包,將其傳遞給Intent,以啓動可從目標活動使用的活動。

+0

Gsree感謝,,什麼是意圖 – User 2011-02-15 04:57:47

+0

的作用,它也使用了一個活動來保存和檢索它的狀態,當它被關閉並重新啓動(例如設備旋轉時)。 – 2011-02-15 04:58:36

+1

@Tushar查看@Ted Hopp的回覆鏈接。這將解釋更多關於意圖和活動。 – GSree 2011-02-16 00:29:08

14

Bundles可以用於通過Intents將任意數據從一個活動發送到另一個活動。當您廣播一個意圖時,感興趣的活動(和其他BroadcastRecievers)將被通知。一個意圖可以包含一個Bundle,以便您可以發送額外的數據以及Intent。

Bundle是鍵值映射,所以它們就像一個Hash,但它們並不嚴格侷限於單個String/Foo對象映射。請注意,只有某些數據類型被視爲「Parcelable」,並且它們在Bundle API中明確拼寫出來。

+0

這是迄今爲止真正解決OP問題的唯一答案,即什麼是捆綁。 http://stackoverflow.com/a/6236801/1588163提供更多見解。 – clapas 2014-10-03 10:55:05

+0

爲什麼要使用一個包,如果我們只能使用映射?謝謝! – 2016-01-28 01:37:32

+0

@RuchirBaronia沒有什麼特別的理由要使用Bundle,除非你打算把它傳遞給需要Bundle對象的Android API的一部分。 – scriptocalypse 2016-01-28 01:46:43

22

A Bundle非常類似於將String鍵映射到值的Java對象Map。它用於在活動和其他應用程序組件之間傳遞信息。它也被框架用來捕獲和恢復狀態信息。

Android不使用普通舊Map對象的原因是Map太靈活;它可以包含無法序列化的對象(比如說,I/O流)。 Bundle API限制了可以添加到捆綁包的對象的類型,使捆綁的內容保證可序列化。 Android框架依賴於這個屬性。

我建議您閱讀關於Application Fundamentals的文檔。除此之外,這解釋了捆綁和意圖是什麼以及它們用於什麼。

+0

爲什麼使用一個包,如果我們只能使用映射?謝謝泰德! – 2016-01-28 01:37:25

60

我要補充的是束通過活動用於將數據傳遞給自己的未來。

當屏幕旋轉或者其他活動啓動時,方法protected void onSaveInstanceState(Bundle outState)被調用,並且活動被破壞。稍後,創建另一個活動實例,並調用public void onCreate(Bundle savedInstanceState)。當創建第一個活動實例時,該包爲空;如果該捆綁包不爲空,該活動繼續其前任開始的一些業務。

Android會自動將文本保存在文本字段中,但它不會保存所有內容,並且有時會出現細微的錯誤。

雖然最常見的反模式是假設onCreate()只是初始化。這是錯誤的,因爲它也必須恢復狀態。

有一個選項可禁用此「重新創建循環活動」行爲,但它不會阻止與重新啓動相關的錯誤,它只會使其更難以提及。

還要注意,當活動將被銷燬時保證其呼叫的唯一方法是onPause()。 (請參閱文檔中的活動生命週期圖。)

53

通過使用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"); 
2

鍵關聯的字符串數據包來共享活動之間的數據值, 和保存狀態的應用程序在oncreate()方法,以便應用程序會知道它停止在哪裏... 我希望它可以幫助:)

7

只需創建一個包,


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); 
0

使用捆綁包通過intent對象將數據從一個活動發送到另一個活動; Bundle保存可以是任何類型的數據。

現在我告訴如何在兩個活動之間創建數據包傳遞數據。

步驟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

Bundle不僅用於在兩個不同組件之間傳輸數據,更重要的是它用於將活動被破壞之前存儲的值恢復到新活動中。

EditText小部件中的文本或ListView的滾動位置。

3

Bundle: - 從String值到各種Parcelable類型的映射。

Bundle通常用於在android的各種活動之間傳遞數據。當我們調用onPause()然後onStop(),然後以相反的順序onStop()到onPause()時,我們會調用這個方法來調用這個方法。

系統用於恢復先前狀態的已保存數據稱爲「實例狀態」,是存儲在Bundle對象中的鍵值對的集合。

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"); 
相關問題