Android学习之路(三)之 显式Intent对于Activity之间的多种跳转方式
来源:互联网 发布:大富豪棋牌源码三网通 编辑:程序博客网 时间:2024/05/29 03:21
显式Intent对于Activity之间的多种跳转方式
Intent能实现Android上三大组件的通讯:Activity、Service、Broadcaster。
这里主要写一下关于Activity之间的4种跳转方式。
第一种:Intent对象的setClass方法
在setClass方法中存在2个参数,第一个是Context对象(传入当前Activity),第二个Class对象(跳转的Activity的Class对象),Context是什么鬼?我们来看一下他的继承关系:
可以看到Context是Activity的父类,由于我们主类继承的是Activity,所以,这里直接传入this这个参数即可。后面那个Class对象,则就传入目标Activity的Class对象即可。
代码如下:
Intent intent1 = new Intent();intent1.setClass(this, Activity03.class);startActivity(intent1);
第二种:Intent对象的setClassName方法(有两种)
在Intent对象中的存在了两种setClassName方法,如下:
setClassName(Context packageContext, String ClassName):intentsetClassName(String packageName, String ClassName):intent
第1种方法中,存在两个参数Context对象和String对象,相对于第一种差别的就是第二个参数,那么,第二个参数根据ClassName可以看出,这个是一个类名,也就是要找到目标Activity的类名,但是,这里光写单纯的类名是不行的,要写上全类名。比如说: "com.example.adroid_3.Activity03" ,第一个参数还是this。
第2种方法中,存在两个String对象的参数,分别是当前Activity的包名和目标Activity的全类名。即
setClassName("com.example.android_3","com.example.android_3.Activity03");
我们知道,如果要不同的android程序安装到同一台android机器上,必须的条件就是两者的包名不同,否则就无法安装,那么上面那种方法可以看到第二个参数是一个全类名,也就是同时包含了一个包名,那么如果第二个参数是另一个程序的包名加类名呢?是不是可以实现从这个程序的Activity跳转到另一个程序的Activity上呢?显然这是可以的,但是这里还要注意一点,如果跳转的目标Activity是主Activity,那么没什么问题,但是如果是非主Activity呢?如果单纯的这么操作,那么运行程序,并且实现该Intent的时候必然会出现报错的问题,那么,这里就要注意一个权限问题,因为如果目标Activity是非共享的(主Activity除外),那么就无法通过一个程序的Activity跳转到这个非共享的Activity,那么,如何解决这个问题呢?只需要在目标程序的AndroidManifest.xml中添加一个android:exported="true"属性就可以了,其中true表示可共享,false表示不可共享。
第三种:Intent对象的setComponent方法
其实这个方法里面又分了很多种,就不一一叙述了,简单介绍一种吧。
setComponent(ComponentName component):intent可以看到里面是一个ComponentName对象,怎么用呢?
setComponent(new ComponentName(this, Activity03.class));new一个ComponentName对象,里面的参数就是同上面三种一样啦。
这次写的程序,就是4个按钮实现不同的跳转方式。
代码如下:
package com.example.android_3;import android.app.Activity;import android.content.ComponentName;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class MainActivity extends Activity implements OnClickListener{Button btn_1 = null;Button btn_2 = null;Button btn_3 = null;Button btn_4 = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);btn_1 = (Button) findViewById(R.id.btn_1);btn_2 = (Button) findViewById(R.id.btn_2);btn_3 = (Button) findViewById(R.id.btn_3);btn_4 = (Button) findViewById(R.id.btn_4);btn_1.setOnClickListener(this);btn_2.setOnClickListener(this);btn_3.setOnClickListener(this);btn_4.setOnClickListener(this);}@Overridepublic void onClick(View v) {if(v.getId() == R.id.btn_1) {Intent intent1 = new Intent();intent1.setClass(this, Activity03.class);startActivity(intent1);}if(v.getId() == R.id.btn_2) {Intent intent2 = new Intent();intent2.setClassName(this, "com.example.android_3.Activity03");startActivity(intent2);}if(v.getId() == R.id.btn_3) {Intent intent3 = new Intent();intent3.setClassName("com.example.android_3", "com.example.android_3.Activity03");startActivity(intent3);}if(v.getId() == R.id.btn_4) {Intent intent4 = new Intent();intent4.setComponent(new ComponentName(this, Activity03.class));startActivity(intent4);}}}
好啦,关于显式Intent的用法就先写到这了。
- Android学习之路(三)之 显式Intent对于Activity之间的多种跳转方式
- Android--Activity之间的跳转(Intent)
- android学习笔记之-利用Intent在多个Activity之间跳转
- 记android学习之路----Activity(4)----Activity之间的跳转与数据传递
- Android四大组件之一Activity详解之Activity之间的跳转方式
- android 之 activity(三、intent 详解)
- Activity 跳转之Intent
- android学习之路-使用Intent跳转
- Android学习笔记之Intent穿梭于各个Activity之间
- Android之Activity跳转方式
- Android之Activity之间的数据传递-多种方法
- 安卓开发之如何利用Intent对象,实现Activity和另一个Activity之间的跳转
- 自学Android之Activity:(三)使用Intent在Activity中跳转和传值(上)
- Android之Activity之间的数据传递-intent-bundle
- Android学习 (三) 在活动之间穿梭之Intent
- Android之Activity之间的数据通信方式大全(一)
- Android之Activity之间的数据通信方式大全(二)
- android开发学习笔记(9)Intent之在两个Activity之间切换
- [Cocoa]_[初级]_[NSPopUpButton重绘实例]
- 安装redis
- vim as python IDE
- 游承超:手机钢化玻璃膜平边与弧边的区别(1P)
- 算法数据结构 单链表的实现+操作 以及和顺序表的对比
- Android学习之路(三)之 显式Intent对于Activity之间的多种跳转方式
- 2014省赛-J一道简单的几何变换
- 编程之美2015资格赛
- TextView在显示文字的时候有个问题就是一行还没显示满就跳到下一行
- Oracle总结
- JavaScript学习笔记之JavaScript数据类型
- UML之类图
- uva654(暴力)
- <Head First Java>学习笔记--第四章:方法操作实例变量 对象的行为