一、隐式意图和显式意图
隐式意图
> 一般要给intent对象指定action动作、data数据、category分类
> 使用隐式手法注册的时候:action 、 category
> 作用:启动其他应用中的某个界面,或者是自己应用中某个界面想被其他应用所打开
> 详细的参数: scheme 、 host 、 port 、path 、mimetype(规定了数据类型)
显式意图
> 一般在给intent里面的构造方法直接指定,从什么地方跳转到什么地方。
三、数据的反响传递
setResult(resultCode , intent);
3.关闭界面
finish();
void onActivityResult(requestCode , resultCode,intent){}
隐式意图
> 一般要给intent对象指定action动作、data数据、category分类
> 使用隐式手法注册的时候:action 、 category
> 作用:启动其他应用中的某个界面,或者是自己应用中某个界面想被其他应用所打开
> 详细的参数: scheme 、 host 、 port 、path 、mimetype(规定了数据类型)
显式意图
> 一般在给intent里面的构造方法直接指定,从什么地方跳转到什么地方。
> 一般是自己应用中的内部跳转
二、数据的正向传递
Intent intent = new Intent();
intent.putExtra("name" , name);
intent.putExtra("age",18);
/*如果想传一个对象类型,student [name,age,number],
最简单的办法就是让student实现Serializable
intent.putExtra();*/
--------------------------------------
Intent intent = getIntent();
intent.getStringExtra("name");
intent.getIntExtra("age" , 0);
三、数据的反响传递
步骤:
1.启动界面等待结果的返回
startActivityForResult( intent ,requestCode);
public void selectContact(View v){
Intent intent = new Intent(this,ContactsActivity.class);
//startActivity(intent);//启动一个新的界面,但是不需要返回结果
//1. 启动下一个界面,然后等待结果的返回
startActivityForResult(intent,1);
}
2.在下一个界面设置返回的结果
setResult(resultCode , intent);
3.关闭界面
finish();
public class SmsListActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sms);
ListView lv = (ListView) findViewById(R.id.lv);
final String [] objects = {
......
};
//指定listView显示生命数据
/**
* ArrayAdapter---数组适配器
* 第一个参数:上下文
* 第二个参数:使用什么ui来显示item
* 第三个参数:显示的数据源
*/
lv.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, objects));
//因为要知道点击的事哪一条item,以便获取它的内容。所以必须要实现点击事件监听
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Toast.makeText(SmsListActivity.this, "点击的是:"+position+"---值是:"+objects[position], 0).show();
Intent intent = new Intent();
intent.putExtra("sms", objects[position]);
//2.返回结果
setResult(1, intent);
setResult(2, intent);
setResult(3, intent);
setResult(4, intent);
setResult(5, intent);
//3.关闭当前界面
finish();
/*Intent intent =new Intent(SmsListActivity.this,MainActivity.class);
intent.putExtra("sms", objects[position]);
startActivity(intent);*/
}
});
}
}
4.接收数据
void onActivityResult(requestCode , resultCode,intent){}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
//为了区分到底显示是哪一个请求回来了,所以有必要判断一下requestCode.
switch (requestCode) {
case 1://联系人回来
String contact = data.getStringExtra("contact");
ed_contact.setText(contact);
break;
case 2: //短信模板回来
//4.获取到下一个界面返回的数据
String sms = data.getStringExtra("sms");
ed_content.setText(sms);
break;
default:
break;
}
}
注意:requestCode和 resultCode的用意
发送:startActivityForResult(Intent intent, int requestCode);
设置值:setResult(int resultCode, Intent data);
取值:protected void onActivityResult(int requestCode, int resultCode, Intent data);
这三个函数都有用到requestCode或者result,这两个以什么区别呢?
requesetCode:当一个界面有多个请求发出去,并且都等待结果的返回。这个时候,就必须要区分一下到底当前是什么请求已经拿到数据返回了,所以就应该使用requestCode判 定。
resultCode:当下一个界面返回的数据有不同种类型,这个时候就可以使用resultCode去判定到底是什么类型的数据(一般都很少用。)