在活动之间传递数据

此示例说明将 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);