Android Activity 之間傳遞數據

1. 簡單的數據傳遞

假設 Activity1 啓動 Activity2 的時候給其傳遞數據

Activity1.java

Intent intent = new Intent(Activity1.this, Activity2.class);
intent.putExtra("key1", 123L);      // long 
intent.putExtra("key2", "Hello");   // String
startActivity(intent);

Activity2.java

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_xxxx);
    ...

    String a = getIntent().getStringExtra("key1");
    long  b = getIntent().getLongExtra("key2", 0);
    ...
}

其他常用數據類型

傳遞數據用 putExtra (String name, TYPE value), 接收數據用相應類型的 get...Extra()

putExtra 數據類型 get…Extra 方法
int getIntExtra(String, int)
int[] getIntArrayExtra(String)
short getShortExtra(String, short)
short[] getShortArrayExtra(String)
byte getByteExtra(String, byte)
byte[] getByteArrayExtra(String)
boolean getBooleanExtra(String, boolean)
boolean[] getBooleanArrayExtra(String)
long[] getLongArrayExtra(String)
double[]) getDoubleArrayExtra(String)
char getCharExtra(String, char)
char[] getCharArrayExtra(String)
String getStringExtra(String)
String[] getStringArrayExtra (String)
long getLongExtra(String, long)
long[] getLongArrayExtra(String)
float getFloatExtra (String, float)
float[] getFloatArrayExtra(String)
double getDoubleExtra(String, double)
double[] getDoubleArrayExtra(String)
Bundle getBundleExtra(String)

需要注意的是:
- 有的 get...Extra() 有兩個參數,比如 getIntExtra(String, int defaultValue), 如果沒有接收到相應的數據,則返回第二個參數指定的默認值。其他一個參數的 get…Extra(String),如果沒收到數據,返回默認值 null。
- 雖然String關鍵字可以隨便起個簡單的名字,但是Android API要求,名字必須使用包名作爲前綴。API: The name must include a package prefix, for example the app com.android.contacts would use names like “com.android.contacts.ShowAll”.

2. 使用 Bundle 傳遞對象

Bundle類用作攜帶數據,它類似於Map,以 key-value 的形式把多種數據存放一個包裹裏面傳遞,它提供了各種常用類型的putXxx()/getXxx()方法。
比較常用的是下面這種方法,還是假設 Activity1 啓動 Activity2 的時候給其傳遞數據。

Activity1.java

Intent intent = new Intent(Activity1.this, Activity2.class);

Bundle bundle = new Bundle();
bundle.putString("key1", "Hello");

intent.putExtras(bundle);
startActivity(intent);

Activity2.java

Bundle bundle = getIntent().getExtras();
String a = bundle.getString("key1");

當然要是有多個Bundle的話,也可以把Bundle當做普通數據類型像上述的一樣傳遞。

putExtra (String name, Bundle value)
getBundleExtra (String name)
發佈了39 篇原創文章 · 獲贊 70 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章