zoukankan      html  css  js  c++  java
  • 跟我学android-Activity介绍

    Activity是android四大组件之一,activity 可以看成是一个屏幕,用户可以在这里做一些操作。activity通常都是满屏的,但也可以小于屏幕而浮于其它窗口之上,比如把activity 的风格设置为 dialog

    如何创建一个Activity

    首先,我们需要为这个activity 创建一个界面(布局)

    然后,我们需要新建一个类,这个类是 Activity 的子类。

    接着,在这个类里 重写onCreate 方法,并且在该方法里加载布局文件(setContentView),初始化控件(findViewById).

    最后,需要在androidmanifest.xml 里声明这个activity。

    如果,你 想设置 该activity 为程序的入口,你需要为该activity 设置 intent-filter

    1  <!-- 入口申明 -->
    2             <intent-filter>
    3                 <action android:name="android.intent.action.MAIN" />
    4 
    5                 <category android:name="android.intent.category.LAUNCHER" />
    6             </intent-filter>

    启动一个新的activity 我们可以使用 startActivity 这个方法

    1         Intent intent = new Intent(this,SecondActivity.class);
    2         intent.putExtra("type", type);
    3         startActivity(intent);

    以上代码表示,我要打开一个 SecondActivity,同时 给它传递一个数据过去。

    有时候,我们 需要打开其他应用程序,这个时候,使用上面这个方式 就做不到了。

    我们需要采用隐式Intnet的方式来打开

    1 Intent intent = new Intent(Intent.ACTION_CALL);
    2 Uri uri = Uri.parse("tel:110");
    3 intent.setData(uri);
    4 startActivity(intent);

    以上代码表示的是:拨打110。

    注意:拨号需要拨号权限

    <uses-permission android:name="android.permission.CALL_PHONE" />

    如果我们的应用程序,运行被其他应用程序调用,我们需要 在 androidmanifest.xml 找到可以被唤起的activity,在这个节点 里定义一个intent-filter,设置我们自己的action

    1  <intent-filter >
    2         <action android:name="com.zy.android.firstandroid"/>
    3         <category android:name="android.intent.category.DEFAULT"/>
    4  </intent-filter>

    设置好了之后,我们在其他应用程序里 就可以通过以下的方式 访问这个 activity

    1 Intent intent = new Intent("com.zy.android.firstandroid");
    2 startActivity(intent);

    有时候,我们不仅仅是启动一个新activity,我们可能需要 接收新activity 返回来的数据,如果用startActivity 这种方式,我们就没法获取返回的数据

    android为我们提供了另一种方式 可以 满足这个需求

    使用 startActivityForResult 替代 startActivity

    同时,我们需要在 接收数据的这个activity里 重写 onActivityResult 这个回调方法。当新activity 返回数据的时候,我们就可以在这个方法里获取到数据

    1 @Override
    2     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    3         // TODO Auto-generated method stub
    4         super.onActivityResult(requestCode, resultCode, data);
    5         //requestCode 请求码
    6         //resultCode 结果码
    7         //data  新activity返回的数据存储在这里,可以取出来使用
    8 }

    activity的生命周期 不在这个地方给大家做介绍了。

    接下来 我们介绍下 保存activity的状态

    我们知道,当activity的状态处于 onPause,onStop,的时候 有可能会被系统kill掉,如果被系统kill掉之后,用户返回回来,看到的 是一个全新的界面,可是用户并不知道 系统kill掉了之前的activity,用户就会觉得很奇怪,咦,我刚才的操作呢?哪去了?哪去 了?

    如果这样的事情真的发生,这将会是一个非常不友好的应用!

    为了避免出现这个的情况,我们需要在 系统kill掉activity之前 把一些数据保存下来。

    activity为我们提供了一个回调方法 叫 onSaveInstanceState()

    我们可以重写这个方法,然后在该方法里 做数据保存操作,保存到 Bundle里去

    1 @Override
    2     protected void onSaveInstanceState(Bundle outState) {
    3         // TODO Auto-generated method stub
    4         super.onSaveInstanceState(outState);
    5         outState.putString("name", "用户操作数据");
    6     }

    保存之后,我们从什么地方取呢? 我们可以在2个地方取到这些数据

    仔细的园友 可定会发现这样一个问题,onCreate 这个方法里有个参数,可以为什么我们一直没使用过它? 其实 这个参数 就是 我们刚才保存的数据,到系统kill掉之后,我们如果做了数据保存,那么系统 在下次打开这个activity 的时候 会把这个数据一起给我们带进来

    so,我们可以在 onCreate 这个方法里  获取数据

     1 @Override
     2     protected void onCreate(Bundle savedInstanceState) {
     3         // TODO Auto-generated method stub
     4         super.onCreate(savedInstanceState);
     5         setContentView(R.layout.result_layout);
     6         //获取 系统kill之前保存的数据        
     7         if(savedInstanceState!=null){
     8             String name = savedInstanceState.getString("name");
     9         }
    10         
    11         tv_info = (TextView) findViewById(R.id.tv_info);
    12         btn_email = (Button) findViewById(R.id.btn_email);
    13         btn_phone = (Button) findViewById(R.id.btn_phone);
    14         
    15         btn_email.setOnClickListener(click);
    16         btn_phone.setOnClickListener(click);
    17         
    18     }

    我们还可以重写 onRestoreInstanceState() 这个回调方法,在这个方法里同样也可以获取到 系统killactivity之前保存的数据

     

  • 相关阅读:
    Nodejs----基本数据类型
    VUE----整理
    Linux----知识储备
    Linux----常用操作
    GIT-常用操作
    CAS 4.0 配置开发手册(转)
    cas配置全攻略(转)
    cas sso入门(转)
    cas sso原理(转)
    spring web flow 2.0入门(转)
  • 原文地址:https://www.cnblogs.com/blog-IT/p/3968193.html
Copyright © 2011-2022 走看看