zoukankan      html  css  js  c++  java
  • Android四大核心组件之Activity

    一、活动生命周期

      

     二、生命周期执行介绍

    当该页面(Activity)被启动时

    会执行onCreate()onStart()onRestart()这三个方法,

    只有当onRestart() 方法执行完后才会处于一个运行状态(Activity running)


    如果另外一个activity 跑到当前正在执行的activity前面了,我们当前的activity就会执行onPause()方法,比如来电话了长按Home键的情况。

    如果从onPause()方法返回到activity页面的时候,会执行一次onResume(),再回到activity。


    如果页面从活动状态,变为不可见状态时,也就是停止状态时候,

    会执行onPause()方法后再执行onStop()方法。 

    如果从onStop()方法处返回到页面时,

    会执行一个onRestart()方法后执行onStart()方法接着再执行onResume()方法后回到页面。

    注意:如果处于onStop()或者onPause()方法时候,页面由于手机内存低、或者被其他软件杀掉的时候,

    再返回页面时候,会从onCreate()方法开始执行,接着onRestart()、onStart()、onResume()


     onDestroy()方法,被系统关闭的时候或者手动的时候才会执行,执行完这个方法后,我们的activity就被彻底关闭了。

     三、Activity方法定义

    活动的整个生命周期由以下Activity方法定义。

     public class Activity extends ApplicationContext {
         protected void onCreate(Bundle savedInstanceState);
    
         protected void onStart();
    
         protected void onRestart();
    
         protected void onResume();
    
         protected void onPause();
    
         protected void onStop();
    
         protected void onDestroy();
     }
    

      

    四、Activity样式修改

    通过添加activity中theme参数可以修改界面的样式,

     如下两个图,可以看出添加theme样式后菜单栏改没了,当然样式可以选择其他的,会有不同效果。

    五、Activity的创建与切换

      1.首先新建一个activity页面,

      用的Android studio,建的比较快,

      如果用eclipse的话需要先创建一个类,并且扩展至Activity,

      然后在AndroidManifest.XML中配置添加页面,

    <activity android:name=".Main2Activity"></activity>
    

      还要在layout中新建一个内容布局,并且在创建的类中的onCreate方法中绑定它。

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main2);
        }
    

      这里我直接通过Android studio创建,省略以上步骤。

        2.在activity1视图中创建一个标签和一个按钮

      注意ID的写法,自定义ID得加上@+/

      

      

      接着回到视图A类,

      编写以下代码

    执行效果如下,点击后跳转到第二个页面

    六、如何关闭掉一个activity

      设计如下,在第二个页面中拖入一个按钮,把当前activity关闭掉

      

    private Button btnButton;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main2);
    
            btnButton =findViewById(R.id.btnClose);
            btnButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    finish();
                }
            });
    
        }
    

      点击关闭后回到页面一

     

    七、activity数据的传送

     设计思路:在页面二中创建一个标签,用来接收来自页面一的数据,

    然后通过按钮“启动第二个页面”把数据带到页面二。

    1.通过putExtra方法和getStringExtra方法实现简单的数据传送。

     

    2.通过Bundle传送复杂类型数据

    执行效果也是一样 的。

     八、activity关闭后数据的回调

      当页面二activity关闭的时候,从页面二把数据传回,然后从页面一获得数据并显示到页面一。

       在页面一想得到一面二传回来的数据,这里就不能用startActivity方法,

      要改用startActivityForResult函数。

      

      并且重载onActivityResult方法,下图中通过data.getStringExtra得到视图二返回的参数

    下图为视图二,这里在finish之前使用setResult将参数传回

    测试如下,先进入视图一,下图中TextView 是默认值,当前没有收到返回值

    接着点击启动第二个页面

    然后点击关闭,这里可以看到已经得到了从页面二返回的数据

    九、用到的部分源码

    package com.ali.application.mytest;
    
    import android.content.Intent;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
    
    import org.w3c.dom.Text;
    
    public class MainActivity extends AppCompatActivity {
    
        private Button S2;//定义一个按钮
        private TextView tRe;//定义一个标签
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            S2=findViewById(R.id.S2);//通过findViewById查找视图中按钮
    
            tRe=findViewById(R.id.tRe);
    
            S2.setOnClickListener(new View.OnClickListener() {//设置一个事件监听器
                @Override
                public void onClick(View view) {
                    //启动页面2
                    Intent i = new Intent(MainActivity.this,Main2Activity.class);
                    //i.putExtra("val","mytest");
                    Bundle data=new Bundle();
                    data.putString("val","myTest");
                    i.putExtras(data);
    //                startActivity(i);//要取得返回值的话不能用这个函数
                    startActivityForResult(i,0);//这里的0对应onActivityResult方法中的requestCode
    
                }
            });
            System.out.println("Create");
        }
    
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    
            String re=data.getStringExtra("val");
    
            tRe.setText(re);
    
            super.onActivityResult(requestCode, resultCode, data);
        }
    
        @Override
        protected void onStart() {
            super.onStart();
            System.out.println("start");
        }
    
        @Override
        protected void onResume() {
            super.onResume();
            System.out.println("resume");
        }
    
        @Override
        protected void onPause() {
            super.onPause();
            System.out.println("pause");
        }
    
        @Override
        protected void onStop() {
            super.onStop();
            System.out.println("stop");
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            System.out.println("destroy");
        }
    
        @Override
        protected void onRestart() {
            super.onRestart();
            System.out.println("restart");
        }
    }
    

      

    package com.ali.application.mytest;
    
    import android.content.Intent;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
    
    public class Main2Activity extends AppCompatActivity {
    
        private Button btnButton;
        private TextView tOut;//定义一个标签
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main2);
    
            btnButton =findViewById(R.id.btnClose);
            btnButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
    
                    Intent i = new Intent();
                    i.putExtra("val","testResult");
                    setResult(0,i);
                    finish();
                }
            });
    
            tOut =  findViewById(R.id.tOut);
    
            //tOut.setText(getIntent().getStringExtra("val"));
    
            Bundle data=getIntent().getExtras();
            tOut.setText(data.getString("val"));
    
        }
    }
    

      

  • 相关阅读:
    Codevs 2296 仪仗队 2008年省队选拔赛山东
    Codevs 1535 封锁阳光大学
    Codevs 1069 关押罪犯 2010年NOIP全国联赛提高组
    Codevs 1218 疫情控制 2012年NOIP全国联赛提高组
    Codevs 1684 垃圾陷阱
    洛谷 P1108 低价购买
    Vijos P1325桐桐的糖果计划
    Codevs 3289 花匠 2013年NOIP全国联赛提高组
    Codevs 2611 观光旅游(floyed最小环)
    C语言基础之彩色版C语言(内含linux)
  • 原文地址:https://www.cnblogs.com/aibk/p/8076737.html
Copyright © 2011-2022 走看看