Intent的应用(二)——数据传递

来源:互联网 发布:初学c语言 编辑:程序博客网 时间:2024/06/05 08:02
一、隐式意图和显式意图
隐式意图
> 一般要给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实现Serializableintent.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 {@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.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() {@Overridepublic 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){}

@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {// TODO Auto-generated method stubsuper.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去判定到底是什么类型的数据(一般都很少用。) 



原创粉丝点击