在活动之间传递数据
此示例说明将 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);