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)