<!-- 第一次写,有点乱,各位见谅 -->
一、初识Intent
1、什么是Intent:
Intent可以理解为信使(意图)。其作用是协助完成android各个组件之间的通讯,目前我所接触到的Intent主要是用来从一个Activity跳转到另一个Activity。
2、Intent的语法定义:
Intent由一个动作和内容组成,定义格式如下:Intent intent = new Intent(动作,内容);
动作有两种,
一种是Android内部定义的动作,例如ACTION_VIEW、ACTION_DIAL、ACTION_CALL等
具体使用如下:
Uri uri =Uri.parse("http://www.sina.com.cn");
Intent intent = new Intent(Intent.ACTION_VIEW,uri);
(2)调用拨号按钮:
Uri uri =Uri.parse("tel:123456789"); //给号码为123456789的人拨号
Intent intent = new Intent(Intent.ACTION_DIAL,uri);
(3)拨打电话:(需要在Manifest文件中设置CALL_PHONE权限)
Uri uri =Uri.parse("tel:123456789");Intent intent = new Intent(Intent.ACTION_CALL,uri); //直接把电话打出去
另一种是用户自定义的Activtity,例如再new一个Activity命名为SecondActivity,语法为:
intent.setClass(MainActivity.this,SecondActivity.class); //(主程序类.this,自定义类.class)
//也可以不使用setClass,直接用Intent intent = new Intent(MainActivity.this,SecondActivity.class);
startActivity(intent);
二、使用Intent实现最常用的页面跳转
实现页面跳转的方式:
(1)startActivity(intent) //无返回值,直接跳转到另一个界面
requestCode是识别代码,用来表示发件人是谁,命名可以自定义,可以用1、2、3等数字表示。
需关联两种方法:
onActivityResult ( int requestCode, int resultCode, Intent data) //在第一个页面中实现,用来接收第二个页面传回来的值
代码实现跳转
(1)startActivity();
/**无返回值跳转
* 1、点击button1* 通过startActivity的方式来实现页面跳转
*/
btn1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
/*
* 第一个参数:上下文对象this
* 第二个参数:目标文件
*/
Intent intent=new Intent(firstActivity.this, secondActivity.class);
startActivity(intent);
}
});
(2)有返回值的跳转
/*
* 2、通过startActivityForResult来实现页面跳转
* 这一段类似于前边,只修改startActivity为startActivityForResult就好
btn2=(Button) findViewById(R.id.button2);
btn2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Intent intent = new Intent(firstActivity.this, secondActivity.class);
/*
*第一个参数:intent对象
*第二个参数:请求的一个标志
*/
startActivityForResult(intent, 1);
}
});
}
/**
* 此时在第二个页面中设置返回值
*/
btn3.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Intent intent_data=new Intent();
intent_data.putExtra("data", "你好"); //首先把要传回去的值放入intent_data中
setResult(2,intent_data);
//结束当前页面,返回到第一个页面
finish();
}
});
/*再回到第一个页面接收传回来的值
* 通过startActivityForResult接收返回数据
* resultCode:第二个页面返回的标志
* data:第二个页面回传的数据
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==1&&resultCode==2){
String content=data.getStringExtra("data");
textview.setText(content);
}
}
三、补充:附带数据的Intent:
其原理是在目前的Activity里将要附带的数据放在Bundle对象中,当对方收到Intent附带的Bundle对象后,再从Bundle中取出附带的数据。
(1)Intent传递数据的流程:
使用setClass方法指定执行类--->根据数据的类型通过Bundle对象进行打包--->使用putExtra方法加入Bundle对象--->使用startActivity方法执行Intent;
Intent intent = new Intent();
intent.setClass(MainActivity.this,SecondActivity.class);
-----------
Bundle bundle = new Bundle();
bundle.putString("NAME","David");
------------
intent.putExtra(bundle);
-------------
startActivity(intent);
(2)取出Intent的数据:
取出Bundle数据的流程:
使用getIntent()方法获取传递的Intent--->利用Intent的getExtras()方法,从Intent中获取Bundle对象--->根据邮包名称获取Bundle对象的数据
Intent intent = this.getIntent();
----------
Bundle bundle = intent.getExtras();
----------------
String name = bundle.getString("NAME");
<!-- 第一篇博客,其实是整理了一下最近的笔记,所以没有特意截图,干说有点枯,各位轻喷,o(∩_∩)o -->