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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章