Android开发笔记--Activity 页面跳转和传值

Android开发笔记--Activity 页面跳转和传值


原文网址:http://www.cnblogs.com/piaoxuewuming/archive/2013/05/22/3092278.html


一、Activity是什么

Activity——它是一个可以同用户交互的应用程序组件。Android程序中的每个Activity都提供了一个单独的界面,它相当于Winform程序的Form。

二、创建Activity

 在现有Project中创建Activity,可以按照:File -> New -> Other -> 选择Android/Android Activity -> 点击Next,设置Activity模板 -> 点击Next,设置Acitivity Name,Layout,Parent等信息 -> 点击Finish 完成Activity的创建。按此方式,我们在程序中创建一个名为DisplayMessageActivity,指定parent为MainActivity。

那么如何指定Android App 默认启动的Activity呢?这就得了解文件AndroidManifest.xml

我们可以清楚的看到我们创建的两个Activity.当我们需要设置某个Acitivity为默认启动Activity时,该Activity的必须配置包含以下信息:

            <intent-filter>

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

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

    </intent-filter>

三、Android 页面跳转

一个Android 程序一般是由多个Activity组成,通过一个小列子介绍下如何完成不同的Activity的跳转和切换。

在一个Activity中打开另一个Activity,会使用到Android的另一个组件:Intent。这里以从MainActivity跳转到DispalyMessageActivity为例:

界面代码:主页

复制代码
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    tools:context=".MainActivity"  >


        <EditText
            android:id="@+id/txtMsg"
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            
            android:inputType="text" >
        </EditText>

        <Button
            android:id="@+id/sendMessage"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="sendMessage"
            android:text="@string/btnSendText" />

</LinearLayout>
复制代码

显示页:

复制代码
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".DisplayMessageActivity" >

    <TextView
        android:id="@+id/txtshow"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:text="@string/hello_world" />

</RelativeLayout>
复制代码

后台代码:

复制代码
package com.example.test;


import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;


public class MainActivity extends Activity {

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

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

    public void sendMessage(View view)
    {
        Intent disIntent=new Intent(this,DisplayMessageActivity.class);
        EditText editText=(EditText)findViewById(R.id.txtMsg);
        disIntent.putExtra("showvalue",editText.getText().toString());
        startActivity(disIntent);
    }
}


package com.example.test;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.widget.TextView;

public class DisplayMessageActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_display_message);
        Intent showIntent=getIntent();
        String messageString=showIntent.getStringExtra("showvalue");
        TextView showtxt=(TextView)findViewById(R.id.txtshow);
        showtxt.setText(messageString);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_display_message, menu);
        return true;
    }

}
复制代码

运行结果:

Android开发笔记--Activity 页面跳转和传值_第1张图片

 

四、Activity生命周期

Android开发笔记--Activity 页面跳转和传值_第2张图片

已经很完整的描述了Activity的生命周期,以及状态转换。但这里针对上图做几点说明:

(1)Activity生命周期中,有很多种状态。其中包括Resumed(运行态,可见且可交互),Paused(暂停,部分可见但不可交互),Stoped(停止态,不可见),Destroyed/Killed(销毁)等;

(2)Entire Lifetime,完整的生命周期从调用onCreate()开始,直至调用onDestroy()结束;

(3)Visible Lifetime,生命周期中可见的阶段,发生在调用onStart()之后,onStop()之前。处于Resumed,或Paused态,在这期间Activity处于屏幕上;

(4)Foreground Lifetime,生命周期可交互的阶段,在调用onResume()之后,onPause()之前。在这期间,Activity显示在所有其他Activity之前,并获取输入焦点。

(5)Android系统通过调用onCreate()方法创建Activity实例.onDestroy()方法释放,关闭Activity;

(6)Android系统通过栈管理Activities,屏幕最前端的Activity位于栈顶。不在栈顶的Activity一般处于Paused状态,Stoped状态,或者Destroyed中的一种;

(7)实际应用中,我们通过重载Android生命周期中不同的方法,实现对不同状态下Activity的控制。如:我们可以重载onCreate()方法,实现对数据库的初始化;重写onDestroy(),执行删除数据库操作等。

(8)Activity的成功启动,会依次调用:onCreate() -> onStart() -> onResume();

(9)关闭一个Activity,系统会依次调用:onPause()->onStop()->onDestroy();

(10)从一个MainActivity跳转到DisplayMessageActivity时,会先调用MainActivity.onPause(),当DispalyMessageActivity打开后,MainActivity会调用onStop()进入Stoped状态;

(11)关闭DisplayMessageActivity回到MainActivity时,系统先调用DispalyMessageActivity.onPause() ,然后依次调用MainActivity.onRestart()->MainActivity.onStart()->MainActivity.onResume()进入Resumed状态,这之后DisplayMessageActivity才会继续关闭流程,完成Activity的关闭。

 


你可能感兴趣的:(Android开发笔记--Activity 页面跳转和传值)