美文网首页Android
Android显示意图和隐式意图

Android显示意图和隐式意图

作者: RosenYang | 来源:发表于2019-04-28 11:23 被阅读0次

    显式意图和隐式意图的作用:

    都是来进行页面的跳转的

    显式意图和隐式意图的区别:

    (一般如果是开启自己应用程序的自定义的一个Activity时,都用显性意图来完成)

    显式意图:必须要指定被开启的Activity的类名或者路径名

    实际上是:只能激活自己应用程序内部的组件,效率高

    主要步骤:    

    //创建意图对象

    Intent 意图对象= new Intent();

    //用意图对象,激活自己应用程序内部自定义的一个组件,下面两个方法任意一个

    意图对象.setClass(上下文,要跳转过去页面的类名.class);

    意图对象.setClassName("包名","包名.类名");

                //运行意图,跳转到自定义界面上

                startActivity(意图对象);

    隐式意图:

    只需要指定动作action和category信息就可以了(一般开启系统自带的应用的界面时,如电话拨号器)

    实际上是:不仅可以激活自己应用程序内部的组件,还可以激活别的应用程序的界面,效率低.

    注意:激活别的应用程序的界面,那个组件必须要在AndroidManifest.xml中暴露了<action>和<category>方可,

    主要步骤:

    a.//跳转过去的自定义Activity需要在AndroidManifest.xml中声明意图过滤器(intent-file);

          必须配置:<action android:name="自定义(一般是所用包名.动作)"/>:主要是为隐示意图调用设置暗号;

                和<category android:name="不能自定义"/>:主要是指定UI(Activity)的额外配置信息,

                比如Default就是该界面不产生图标,比如Car_dock就是在车载模式下运行.

            b.开启隐式意图:

                 //1.创建一个意图对象

                    同时还可以设置动作:Intent Intent对象= new Intent("对应AndroidManifest.xml中                    action的内容");

                    IntentIntent对象= new Intent();

                //2.为意图设置动作,(此调用自定义的界面组件,如果是调用安卓系统的,要按格式)

                    Intent对象.setAction("对应AndroidManifest.xml中action的内容");

               //3.为意图设置一个category

                    Intent对象.addCategory("对应AndroidManifest.xml中category的内容");

               //4.开启意图

                    startActivity(Intent对象);

    A.隐式意图加强版:(除了上面的步骤都有外,只写增加的步骤)

        跳转过去的自定义Activity需要在AndroidManifest.xml中的意图过滤器(intent-file)额外声明;

        二者任意一个皆可以,没必要全都定义,在<data>里一般就是设置各种条件的

        <data android:scheme="自定义" android:host="自定义"/>

    固定模式:text/plain表示文件模式.配置mimeType的数据:必须为xxx/xxx的格式否则会报异常  

        B.开启隐式意图:

        意图对象.setData(Uri.parse("scheme里的内容://host里的内容"));

        注意: ":" 是固定模式,不可以缺失.出现异常不易发现.

        意图对象.addCategory("mimeType里的内容")

        注意:以上两个方法不能同时存在,会相互清除对方的数据,因此

            当两个数据皆要设置时:意图对象.setDataAndType(data, type);//data是Uri数据,type           是"mimeType里的内容"

    注意:若是在配置文件中写多个scheme,只需要写一个setDate即可

    使用Intent进行数据的传递:

    八大基本数据类型,String,数组,ArrayList<String>, Bundle数据捆, 实现序列化接口的javabean。

    把数据绑定在Intent对象上:Intent对象.putExtra("xxx(key值自定义,不过获取数据时,要用这个值)",数据);

    基本数据类型都可以传递,parcelable(是android特有的),serializable(序列化)数据也可以,不过二者必须实现接口才可以用intent传递数据.

    获取传递过来的意图对象:getIntent()

    得到绑定在传递过来意图对象的数据:Intent对象.get传过来的数据类型(首字母大写)Extra("key值");//

    注意:

    a.必须要获取到传递过来的意图对象,方可获取意图对象身上的数据

    b.key值是暗号,必须一致方可的到数据.且传过什么数据类型,方法就要是对应的类型.

    使用Intent进行数据传递的另一种方式:(界面A开启界面B,界面B把需要回传的数据传给界面A)

    resultCode:requestCode:请求码,目前用不到,设置为0             data:携带数据的intent对象

    设置数据:setResult(resultCode, data);(把当前界面(B)的数据返回给开启我的界面(A))

        注意:设置resultCode是用来帮助获取数据界面区分结果是有哪个界面返回的。

            2.界面B需要使用intent封装结果数据,使用setResult方法绑定intent,并调用finish关闭界面B。       

             intent:执行的intent对象,requestCode:请求码,目前用不到,设置为0       

    获取数据:startActivityForResult(intent,requestCode);//开启新界面,获取返回值,

           1.界面A需要使用startActivityForResult方式开启界面B。

           3.界面A需要复写OnActivityResult方法,接收B界面发送过来的Invent,获取其携带数据   

    requestCode 和 resultCode 是用来区分结果是有哪个界面返回的。data是得到回传携带数据的Intent对象

        protected void onActivityResult(int requestCode, int resultCode, Intent data) {

            super.onActivityResult(requestCode, resultCode, data);

        }

    }       

    相关文章

      网友评论

        本文标题:Android显示意图和隐式意图

        本文链接:https://www.haomeiwen.com/subject/nzxdnqtx.html