zoukankan      html  css  js  c++  java
  • Android开发笔记Activity 页面跳转和传值

    一、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;
        }
    
    }

    运行结果:

    四、Activity生命周期

    已经很完整的描述了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的关闭。

  • 相关阅读:
    HDU1575--Tr A(矩阵快速幂)
    HDU 2147--HDU 2147(博弈)--我可能做了假题。。。
    新年第一发--HDU1848--Fibonacci again and again(SG函数)
    【转】你真的会二分查找吗?
    windows与ubuntu双系统的安装
    bestcoder#9--1001--Lotus and Characters
    PC端的混合应用通讯问题
    JS构造函数详解
    JS的prototype的共享机制分析
    使用a标签直接下载图片
  • 原文地址:https://www.cnblogs.com/piaoxuewuming/p/3092278.html
Copyright © 2011-2022 走看看