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去判定到底是什么类型的数据(一般都很少用。) 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值