android中activity的使用

  1. activity的作用
    activity作为android四大组件中的一个,在我们开发的每个安卓应用中都会用到,是最常用的组件之一。一个activity就是我们平常看到的一个页面,一个安卓应用可以有很多个页面,其中每个页面就是一个activity。
  2. activity的基本用法
    我们创建一个android应用之后,开发工具会自动为我们创建一个activity。activity其实就是一个继承了ActionBarActivity类的java类,一般默认的类名为MainActivity,当然也可以修改。我们新创建出来的activity一般结构如下。
package com.zl.demo;

import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.os.Build;

public class MainActivity extends ActionBarActivity {

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

    }
}

这是最简单的一个activity实例。我们可以看到一个类继承了ActionBarActivity 并重写了onCreate方法。这是固定写法,并不需要我们手动去写,在项目创建出来之后我们就存在,我们可以删掉生成的多余的代码。setContentView(R.layout.activity_main);方法设置了这个activity对应的布局文件,形参为布局文件的id。布局文件是一个xml文件,可以方便我们编写页面。示例代码如下。

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.zl.demo.MainActivity"
    tools:ignore="MergeRootFrame" >

    <EditText
        android:id="@+id/editText1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10" >

        <requestFocus />
    </EditText>

</FrameLayout>

其中EditText是一个文本框,它的id为editText1,我们要在java中获取文本框对象,可以在onCreate()方法中使用activity继承自父类的方法fandViewById(R.id.editText1),来获取一个Object类型的对象,强转为相应组件的类型。并通过组件的getxxx()、setxxx() 来设置和获取组件的信息。至于为什么在onCreate方法中调用,下面会给出解释。为什么是R.id.editText1,当我们创建一个android项目之后,开发工具会自动为我们创建一个类名为R的类,这个类又有很多内部类,其中全是静态参数,id便是其中的一个内部类。这个类不需要我们程序员手动的来修改,当我们在布局文件中添加或修改一个组件的id时开发工具会自动为我们在R类中添加或修改对应的静态变量的名称并生成一个唯一的id值。
3. activity的生命周期
上面讲了在onCreate方法中获取组件对象,其实并部一定在onCreate中获取,只是因为onCreate方法是这个activity的入口。activity在父类中继承了很多方法,一般我们需要重写的方法除了onCreat之外还有这几个

@Override
protected void onStart() {
    super.onStart();
}

@Override
protected void onResume() {
    super.onResume();
}

@Override
protected void onPause() {
    super.onPause();
}

@Override
protected void onStop() {
    super.onStop();
}

@Override
protected void onDestroy() {
    super.onDestroy();
}

当页面创建的时候最先执行onCreate()方法,然后执行onStart()方法,再执行onResume()方法。当页面失去焦点的时候会执行onPause()方法。当activity暂停时执行onstope()方法,退出时执行onDestroy()方法销毁。当页面从失去焦点的状态重新变为前台页面的时候会再次调用onPause()方法。当页面从暂停状态再次开始的时候会进入onResume()方法然后依次往下执行。

一般情况下onCreate用来初始化页面,onStop方法在应用暂停时保存暂停时的状态,onStart用于恢复暂停前的状态。而onPause在页面失去焦点时保存状态,onPause在页面重新获得焦点的时候执行来恢复程序。onDestroy在程序退出的时候保存信息并解除资源占用。

4.activity的页面跳转
一个应用程序一般都会有好几个页面,而页面间的相互跳转是通过一个叫做Intent的对象配合activity继承自父类的方法startActivity(intents);来实现的。
我们可以为一个应用程序写好几个activity,那么哪个activity才是程序的入口呢?换句话说当我们点击程序图标的时候会最先进入哪个界面呢?
当我们创建处一个activity的时候会在程序的清单文件中做配置,将这个activity注册到程序中。打开AndroidManifest.xml文件我们看到的结果如下

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.zl.demo"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="19" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.zl.demo.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name="com.zl.demo.SecendActivity"
            android:label="@string/title_activity_secend" >
        </activity>
    </application>

</manifest>

我们看到了两个activity标签,第一个标签中有一段intent-filter的配置,通过这个意图过滤器会为该activity创建一个图标,如果在两个activity上配置该意图过滤器,那么该程序将会有两个桌面图标。 注册完activity后我们就应该进行页面跳转了,页面跳转时会用到intent对象,该对象有两种用法,一种显式意图,一种隐式意图。本文只对显式意图做出说明,以后会再专门对意图进行说明。先写一个简单例子从MainActivity跳转到SecendActivity.

@Override
protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Intent intents = new Intent(this, SecendActivity.class);
    startActivity(intents);
}

创建一个意图在构造方法的形参中分别传入Context对象和要跳转到的activity的class。然后通过父类的startActivity(intents);即可跳转。

猜你喜欢

转载自blog.csdn.net/qq_28859405/article/details/52565737