Intent
Intent,意图对象大致包括7大属性:Action(动作)、Data(数据)、Category(类别)、Type(数据类型)、Component(组件)、Extra(扩展信息)、Flag(标志位)。
Component(组件)
用来启动Activity,指定Intent的目标组件名称,即要从哪个Activity跳转到哪个Activity。
构造方法传入Component
Intent intent = new Intent(this, SecondActivity.class);
startActivity(intent);
setClass方法传入Component
Intent intent = new Intent();
intent.setClass(this, SecondActivity.class);
//或者intent.setClassName(this, "com.example.app.SecondActivity");
//或者intent.setClassName(this.getPackageName(),"com.example.app.SecondActivity");
startActivity(intent);
Extra(额外信息)
Intent可以携带的额外 key-value 数据。
可通过调用putExtra()方法设置数据,每一个 key对应一个 value数据。
也可以通过创建 Bundle对象来存储所有数据,然后通过调用putExtras()方法来设置数据。
putExtra()传值
// 发送
Intent intent = new Intent(MainActivity.this,OtherActivity.class);
intent.putExtra("name", "Nicole");
intent.putExtra("age", 25);
startActivity(intent);
//接收
Intent intent = getIntent();
String name = intent.getStringExtra("name");
int age = intent.getIntExtra("age",0);
创建Bundle传值
// 发送
Intent intent = new Intent(this,OtherActivity.class);
Bundle bundle = new Bundle();
bundle.putString("name", "Ben");
bundle.putInt("age", 28);
intent.putExtras(bundle); //将bundle传入intent中
startActivity(intent);
//接收
Intent intent = getIntent();
Bundle bundle = intent.getExtras();
String name = bundle.getString("name");
int age = bundle.getInt("age");
Action(动作)
不明确指定启动哪个Activity,给Activity设置Action、Data、Category,让系统来筛选出合适的Activity。
<activity
android:name="com.example.app.SecondActivity">
<intent-filter>
<action android:name="mark"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
Intent intent = new Intent();
// Intent intent = new Intent("mark"); 构造方法直接传入action标签
intent.setAction("mark");
startActivity(intent);