在活動之間傳遞資料

此示例說明將 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 資料型別以及 arraysBundleParcelable 資料。通過 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);