</pre> intent 在组件之间起信息传递的作用,intent分为显式意图和隐式意图。显式意图相应简单好理解。<p></p><p> 显式意图 及 两个Activity之间通过intent传递数据的方法:</p><p> 1.两个Activity之间传递简单的数据类型,示例:</p><p>MainActivity:</p><p></p><pre name="code" class="java">public class MainActivity extends Activity implements OnClickListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button =(Button) findViewById(R.id.bt_par);
button.setOnClickListener(this);
}
public void onClick(View v) {
switch (v.getId()) {
case R.id.bt_par:
Intent intent = new Intent(this,ResultActivity.class);
intent.putExtra("name", "张三");
startActivity(intent);
break;
}
}
}
ResultActivity:
public class ResultActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.result);
Intent intent = getIntent();
String name = intent.getStringExtra("name");
TextView view = (TextView) findViewById(R.id.textView1);
view.setText("名字:"+name);
}
}
这里把第一个Activity的String 类型的名字传递到第二个页面。这里还可以传递很多其他基础类型数据。比如int,boolean等类型的数据。
2.如果需要通过intent传递对象则需要相应的javabean实现序列化。实现Serializable或者Parcelable接口。下面的例子演示实现Serializable接口。
首先创建一个实体类Student
public class Student implements Serializable{
private static final long serialVersionUID = 1L;
private String name;
private String sex;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
隐式意图:没有明确指定那个组件来接收该意图,系统将会根据隐式意图中设置的动作(action)、类别(category)、数据(URI和数据类型)找到最合适的组件来处理这个意图。示例:
MainActivity中点击事件中代码如下:
public void onClick(View v) {
switch (v.getId()) {
case R.id.bt:
Intent intent = new Intent();
intent.setAction("com.blackclouds.www");
Student student = new Student();
student.setName("张三");
student.setSex("男");
student.setAge(20);
intent.putExtra("STU", student);
startActivity(intent);
break;
}
}
接收的Activity在清单文件AndroidManifest.xml中的配置如下:
<activity
android:name=".ResultActivity"
android:label="第二个activity" >
<intent-filter>
<action android:name="com.blackclouds.www" />
<!-- 默认的category必须要配置-->
<category android:name="android.intent.category.DEFAULT"/>
<!-- 这里还可以配置相应的 数据和类型 -->
</intent-filter>
</activity>
运行结果:
隐式意图比显式意图的效率低,因为他要从系统中去找匹配的相关组件。
应用场景,在同一个应用中,使用显式意图。如果在不同的应用中,激活别人的应用,使用隐式意图。