在活動之間傳遞資料
此示例說明將 String
的值從 OriginActivity
傳送到 Some data!
到 DestinationActivity
。
注意: 這是在兩個活動之間傳送資料的最直接方式。請參閱使用入門模式的示例,以獲得更強大的實現。
OriginActivity
public class OriginActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_origin);
// Create a new Intent object, containing DestinationActivity as target Activity.
final Intent intent = new Intent(this, DestinationActivity.class);
// Add data in the form of key/value pairs to the intent object by using putExtra()
intent.putExtra(DestinationActivity.EXTRA_DATA, "Some data!");
// Start the target Activity with the intent object
startActivity(intent);
}
}
DestinationActivity
public class DestinationActivity extends AppCompatActivity {
public static final String EXTRA_DATA = "EXTRA_DATA";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_destination);
// getIntent() returns the Intent object which was used to start this Activity
final Intent intent = getIntent();
// Retrieve the data from the intent object by using the same key that
// was previously used to add data to the intent object in OriginActivity.
final String data = intent.getStringExtra(EXTRA_DATA);
}
}
也可以傳遞其他 primitive
資料型別以及 arrays
, Bundle
和 Parcelable
資料。通過 Serializable
也是可能的,但應該避免,因為它比 tihuan 慢三倍以上。
Serializable 是標準的 Java interface
。你只需通過實現 Serializable
interface
將類標記為 Serializable
,Java 將在需要的情況下自動將其序列化。
Parcelable 是一個 Android 特定 interface
它可以在自定義資料型別(即自己的物件/ POJO 物件)來實現,它可以讓你的物件被夷為平地,重建本身,而不需要的目標做任何事情。有一個文件示例可以使物件可以生成 。
一旦你有了 parcelable
物件,就可以像原始型別一樣傳送它,並帶有一個 intent 物件:
intent.putExtra(DestinationActivity.EXTRA_DATA, myParcelableObject);
或者在 bundle /作為片段的引數:
bundle.putParcelable(DestinationActivity.EXTRA_DATA, myParcelableObject);
然後使用 getParcelableExtra 從目的地的意圖中讀取它:
final MyParcelableType data = intent.getParcelableExtra(EXTRA_DATA);
或者從包中讀取片段時:
final MyParcelableType data = bundle.getParcelable(EXTRA_DATA);
一旦你有了 Serializable
物件,你可以把它放在一個 intent 物件中:
bundle.putSerializable(DestinationActivity.EXTRA_DATA, mySerializableObject);
然後還從目的地的 intent 物件讀取它,如下所示:
final SerializableType data = (SerializableType)bundle.getSerializable(EXTRA_DATA);