• Android的Activity的页面跳转和数据传递


    1.AndroidManifest文件中的几个细节 , Android系统中一个界面就对应了一个activity。

     1.一个应用程序可以有多个桌面图标:

    创建桌面图片的方法,给activity添加以下节点:

    <intent-filter>

    //MAIN:应用程序的入口  

    <action android:name="android.intent.action.MAIN" />     

    //LAUNCHER:启动器. category常见的类型:CAR_MODE、CAR_DOCK车载电脑模式、LAUNCHER启动器、DEFAULT默认的类型,我们自己开发的activity通常使用这个类型。                

    <category android:name="android.intent.category.LAUNCHER" />          

    </intent-filter>    

    1.action动作:可以使用系统定义好的类类型,可以自定义(大写);        

    2.activity节点中的label标签的值表示桌面图标的名称;    

    3.application节点中的label标签的值可以在应用程序管理列表中看到;    

    4.application节点中的label和activity节点中的label标签不是一个概念,activity节点中的label标签表示界面的标题;   

    2.意图设置动作激活新的界面(重点)

    Intent意图:做一件事情的想法;

    意图包括的元素:动作:action,数据:data

    意图的作用:激活组件和携带参数.

    * 使用意图开启一个activity的代码:

    //隐式意图  

    Intent intent = new Intent();

    //设置目标activity的动作(必须与配置文件的aciton一致)      

    intent.setAction("android.intent.action.SHOWSECOND");      

    //设置目标data的动作(必须与配置文件的data一致)      

    intent.setData(Uri.parse("qaa://011"));      

    //设置目标category的动作(必须与配置文件的category一致)      

    intent.addCategory("android.intent.category.DEFAULT");

    //开启一个新的activity(打开一个新的界面)      

    startActivity(intent);  

    3.意图设计的目的

    解耦:让应用程序能够独立运行又能相互调用.

    * WebView的使用:

     wv = (WebView) findViewById(R.id.wv);   

    //设置浏览器不带缓存的功能   

    WebSettings settings = wv.getSettings();   

    //设置浏览器是记录缓存数据   

    settings.setAppCacheEnabled(false);      

    //获取其他应用程序使用intent传递雇来的数据   

    Intent intent = getIntent();      

    Uri uri = intent.getData();    

    if(uri != null){    

    wv.loadUrl(uri.toString());   

    }

    4.隐式意图和显式意图(重点)

    * 隐式意图:

    在开启目标activity的时候没有直接指定目标activity名称,通过指定一组动作、数据、类型等,让系统自动的去配置文件中匹配目标activity。开启的速度比较慢。

        模版代码:

      Intent intent = new Intent();    

     //设置目标activity的动作(必须与配置文件的aciton一致)      

    intent.setAction("android.intent.action.SHOWSECOND");      

    //设置目标data的动作(必须与配置文件的data一致)      

    intent.setData(Uri.parse("itheima://110"));      

    //设置目标category的动作(必须与配置文件的category一致)      

    intent.addCategory("android.intent.category.DEFAULT");      

    //开启一个新的activity(打开一个新的界面)      

    startActivity(intent);

     应用场景:     

    开启别的应用程序中的activity。

    * 显式意图:     

    在开启目标activity的时候直接指定目标activity名称。开启的速度比较快。

       模版代码:

      //创建显式意图,速度比较快。参数1:代表上下文,参数2:字节码。      

    Intent intent = new Intent(this, SecondActivity.class);      

    //开启目标activity      

    startActivity(intent);

       应用场景:限于应用程序内部开启activity。

    5.意图传递数据(重点)

    从第一个界面跳转到第二个界面上,并且把数据传递给第二个界面。

    传递数据:

    //创建显式意图      

    Intent intent=new Intent(this, SecondActivity.class);        

     // 装入名字    

    intent.putExtra("name", "qaa");   

    //装入年龄     

    intent.putExtra("age", 11);            

    //简单的装入

    Bundle b = new Bundle();      

    b.putString("name", "ama");      

    b.putInt("age", 4);            

    intent.putExtras(b);      

    //开启目标activity      

    startActivity(intent);

    接收数据:     

    //获得调用者传递过来的意图对象   

    Intent intent = getIntent();      

    // 获得传递过来的名字 

    String name = intent.getStringExtra("name");   

    //获得传递过来的年龄

     int age = intent.getIntExtra("age", 0);      

    //间接获得

    Bundle b = intent.getExtras();   

    String name = b.getString("name");   

    int age = b.getInt("age");

    //传递方:put,接收方:get

    6.URI详解

     URI:数据资源地址;    

    content://com.qaa.superbrowser/ad/table1/1    

    URL:http://www.baidu.com/image/1.jpg

    7.开启activity获取返回值(重点)

      从第一个界面跳转到第二个界面,当第二界面关闭的时候返回给第一个界面一些数据。

      步骤:

     1.创建一个显示意图,使用startActivityForResult方法开启目标activity:   

    Intent intent = new Intent(this,SecondActivity.class);      

    //开启目标activity,并期望目标activity关闭的时候返回一个结果数据   

    startActivityForResult(intent, 0);

     2.在目标activity中设置返回数据,并关闭界面:   

    Intent intent = new Intent();   

    intent.putExtra("news", "我是第二个界面返回的额数据");      

    //设置返回的数据,在当前界面关闭的时候才会调用这个方法   

    setResult(100, intent);   

    //关闭当前界面   

    finish();       

    3.在调用者activity中重写onActivityResult方法接收目标activity返回的数据:   

    /**   

    * 接收目标activity返回的数据   

    * requestCode 请求码,是在开启activity时设置   

    * resultCode 结果码,是在设置返回数据时设置   

    * data 目标activity返回的意图对象   

    */   

    @Override   

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

    {    

    super.onActivityResult(requestCode, resultCode, data);        

    //接收目标activity返回的数据    

    String news = data.getStringExtra("news");    

    //使用请求码区分当前数据是从哪个业务逻辑界面返回的    

    switch (requestCode) {    

    case 0:     

    Toast.makeText(this, news, 0).show();     

    break;    

    case 1:     

    Toast.makeText(this, news, 0).show();     

    break;    

    }   

    }

    8.请求码和结果码的作用(重点)

     用来判断当前数据是从哪个业务逻辑界面返回的。

    9.activity的生命周期(重点)

     人的生命周期:被出生、幼年、童年、少年、青年、中年、老年。

    Activity的生命周期(重点):7个

    onCreate:初始化    

    onStart:开始    

    onResume:界面可见    

    onPause:暂停,界面不可见    

    onRestart:重新开始    

    onStop:停止    

    onDestroy:销毁

    1.打开一个界面:onCreate、onStart、onResume;  

    2.最小化一个界面:onPause、onStop;  

    3.重新打开被最小化的界面:onRestart、onStart、onResume;  

    4.关闭一个界面:onPause、onStop、onDestroy;    

    10.横竖屏切换的生命周期(重点)

     横竖屏切换的生命周期变化:先关闭前一个界面,再打开一个新的界面。

     固定横竖屏的方法:

    android:screenOrientation="portrait"

    常见的类型:portrait竖屏、landscape横屏、sensor感应器类型 可以横竖屏自适应,默认是这个类型。

    11.任务栈的概念

     队列:先进先出;  

    栈:先进后出;    

    任务:要做一件事情;在Android中对应了一个打开的activity实例。    

    任务栈:存储任务的栈;

    打开一个界面时,就会有一个任务压入栈中;    

    关闭一个界面时,就会从任务栈中清除一个任务;    

    当应用程序的界面都关闭的时候,任务栈就被清空了,说明应用程序也退出了;

     任务栈启动模式:

     standar:标准模式,每打开一个界面都会创建一个实例放入任务栈中;      

    singleTop:单一顶部模式,

    12.singletop启动模式

     singletop 单一顶部模式

    在activity的配置文件中设置

    android:launchMode="singleTop"  如果任务栈的栈顶存在这个要开启的activity,不会重新的创建activity,而是复用已经存在的activity。保证栈顶如果存在,不会重复创建。  应用场景:浏览器的书签

    13.singletask和singleinstance启动模式

     singetask:单一任务栈,在当前任务栈里面只能有一个实例存在,应用于Activity独立的运行。

    当开启activity的时候,就去检查在任务栈里面是否有实例已经存在,如果有实例存在就复用这个已经存在的activity,并且把这个activity上面的所有的别的activity都清空,复用这个已经存在的activity。保证整个任务栈里面只有一个实例存在      

    应用场景:浏览器的activity  

    如果一个activity的创建需要占用大量的系统资源(cpu,内存)一般配置这个activity为singletask的启动模式。webkit内核 c代码

     singleInstance启动模式非常特殊, activity会运行在自己的任务栈里面,并且这个任务栈里面只有一个实例存在  如果你要保证一个activity在整个手机操作系统里面只有一个实例存在,使用singleInstance  应用场景: 电话拨打界面

    14.帧动画    

    帧动画(Drawable Animation):把一组有序的图片,一帧一帧的去播放,这个变化过程;

    代码(参考开发文档):

     xml文件:

    <?xml version="1.0" encoding="utf-8"?>  

    <animation-list xmlns:android="http://schemas.android.com/apk/res/android"    

    android:oneshot="false"      >

    <item        

    android:drawable="@drawable/girl_1"        

    android:duration="200"/>    

    <item        

    android:drawable="@drawable/girl_2"        

    android:duration="200"/>    

    <item        

    android:drawable="@drawable/girl_3"        

    android:duration="200"/>    

    <item        

    android:drawable="@drawable/girl_4"        

    android:duration="200"/>    

    <item        

    android:drawable="@drawable/girl_5"        

    android:duration="200"/>    

    <item        

    android:drawable="@drawable/girl_6"        

    android:duration="200"/>    

    <item        

    android:drawable="@drawable/girl_7"        

    android:duration="200"/>    

    <item        

    android:drawable="@drawable/girl_6"        

    android:duration="200"/>    

    <item        

    android:drawable="@drawable/girl_7"        

    android:duration="200"/>    

    <item        

    android:drawable="@drawable/girl_6"        

    android:duration="200"/>    

    <item        

    android:drawable="@drawable/girl_7"        

    android:duration="200"/>    

    <item        

    android:drawable="@drawable/girl_8"        

    android:duration="200"/>    

    <item        

    android:drawable="@drawable/girl_9"        

    android:duration="200"/>    

    <item        

    android:drawable="@drawable/girl_10"        

    android:duration="200"/>    

    <item        

    android:drawable="@drawable/girl_11"        

    android:duration="200"/>

     </animation-list>

  • 相关阅读:
    org.apache.hadoop.security.AccessControlException: org.apache.hadoop.security.AccessControlException: Permission denied:
    linux iptables跟service 命令无效解决方法
    eclipse运行C++控制台不输出结果的解决办法
    C#操作mpp文件代码参考
    vs2010 开始执行(不调试) ctrl F5 出现任意键继续
    关于gcc、glibc和binutils模块之间的关系,以及在现有系统上如何升级的总结
    NUnit在Visual Studio 2010中的配置和使用
    【转】从CSDN的趣味题学C# 3.0
    gnome3程序图标下的文字如何改大
    使用autoconf、automake等来制作一个以源代码形式(.tar.gz)发布的软件、并可在执行configure时使用自定义参数
  • 原文地址:https://www.cnblogs.com/kingqinwang/p/5123452.html
Copyright © 2020-2023  润新知