问题一:如何跳转页面
Intent的作用是:各组件的传递数据的一种重要方式,不仅仅指明当前组件想要执行的动作,还可以在不同的组件之间传递数据。
用法分类:显示和隐式Intent
显式用法:
使用构造函数 intent(Context packageContext,Class> cls)
参数解释:1. 活动启动的上下文环境
2.class 指定想要启动的目标活动。
使用startActivity()方法
button1.setOnClickListener(new OnClickListener(){
public void onClick(View v){
Intent intent=new Intent(FirstActivity.this,SecondActivity.class);
startActivity(intent);
}
方法二:使用隐式方法
不指明我们想要启动哪一个活动,而是指定了一系列action 和 category交由系统区分析这个Intent 。
步骤:
在标签下配置的内容,指定当前活动可以响应的action和category
举例;
<activity android:name=".secondActivity">
<intent-filter>
<action android:name="com.example.activitytest.ACTION_START"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
文件二
button1.setOnClickListener(new OnClickListener(){
public void onClick(View v){
Intent intent=new Intent("com.example.activitytest.ACTION_START");
startActivity(intent); //这里的category是是默认值,在执行startActivity()可以自动添加到intent中
}
}
//在将category和action都 匹配上的时候,可以启动secondActivity 了
关于action和category的几点说明
每个Intent 可以指定一个action 但是可以指定多个category。
intent.addCategory("com.example.activityteset.MYCATEGORY’);
扩展:使用隐式Intent的更多用法
一:启动其他程序的活动(多个Android应用程序之间功能共享)
举例:
调用系统浏览器
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.baidu.com"));//用于
//intent正在操作的数据,数据的形式通常是URi.parse()解析产生的
startActivity(intent);
}
});
标签那用于更精确的指定当前活动能够相应什么类型的数据。
主要可以配置以下内容
1.android:scheme 用与指定数据的协议部分。(http)
2.Android:host 用于指定主机名部分(www.baidu.com)
3.android:port 用于指定数据的端口部分
4.android :path 用于指定主机名和端口之后的部分,如一段网址跟在域名之后的内容。
5.Android:mimetype用于指定可以处理的数据类型,语序使用通配符的方式进行指定。
举例:
<activity android:name=".Main2Activity" android:label="second Page">
<intent-filter tools:ignore="AppLinkUrlError">
<action android:name="android.intent.action.VIEW"> </action>
<category android:name="android.intent.category.DEFAULT"></category>
<data android:scheme="http"></data>
</intent-filter>
</activity>
问题:使用隐式intent 打开系统拨号界面?
buttonTest.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent();
intent.setAction(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:10086"));
startActivity(intent);
}
});
在activity 之间传递信息
Intent intent=new Intent(MainActivity.this,Main2Activity.class);
intent.putExtra("name","Liming"); //设置intent 的信息的传递
startActivity(intent);
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
Intent intent=getIntent(); //获取intent传递
intent.getStringExtra("name");//获取值
Log.e("name",intent.getStringExtra("name")); //打印
}
页面的交互返回结果
步骤:
一:在请求页面里,使用startActivityForResult()
//在firstActivity中的配置
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(MainActivity.this,Main2Activity.class);
intent.putExtra("name","Liming");
startActivityForResult(intent,1); //1 为requestCode
}
});
//数据返回后的操作
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
switch( requestCode){ //什么样的请求有什么样的返回处理
case 1:
if(resultCode==RESULT_OK){
Log.e("name", "onActivityResult: "+data.getStringExtra("name"));
}
break;
default:
}
}
secondeActivity的处理
//方法一:使用按钮处理并且返回结果吧!
buttonTest.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent();
intent.putExtra("name","Lixiao");
setResult(RESULT_OK,intent); //设置返回结果(结果码,结果数据)
finish();
}
});
//方法二:通过重载onBackPressed方法(在activity 中进行重载)
@Override
public void onBackPressed() {
Intent intent=new Intent();
intent.putExtra("name","OnBackPressed");
setResult(RESULT_OK,intent);
finish();
}