界面之间的跳转
偷偷小懒,今天就不再创建一个新的工程实现所描述的内容了。我使用的第一个界面就是上篇博文介绍的登录界面,依照我们平时的认知,在当前界面上未发生任何动作的时候,界面是不会发生任何变化的。但当人为在某些图形组件上发生了一定的动作之后,可能会使页面发生跳转或者更改现象。这不难让我们想到事件这一概念。
图形组件添加监听器
根据上篇博文,大家了解到设计图形界面可以通过拖拽组件或布局、修改代码实现。当需要为图形界面添加监听器或者实现其他非图形化功能时,我们只能回归到原来的编程方式——代码编程。一般我们进行编程的文件在src文件夹下的包下,找到对应界面的Activity.java文件,对组件大小没有要求的时候,可以在OnCreate()——创建界面的同时获得组件。
package com.example.qqlogon; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.widget.Button; public class LogonActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_logon); // 获取登录按钮对象 Button butLogon = (Button)this.findViewById(R.id.Logon); Button butReset = (Button)this.findViewById(R.id.reset); // 创建实现监听器方法的类 LogonListener ll = new LogonListener(this); // 给按钮对象添加监听器方法,并绑定监听器对象 butLogon.setOnClickListener(ll); butReset.setOnClickListener(ll); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.logon, menu); return true; } }
package com.example.qqlogon; import android.content.Intent; import android.view.View; import android.widget.Button; /** * 定义实现OnClickListener接口抽象方法的类 * * @author Daily * */ public class LogonListener implements android.view.View.OnClickListener { // 声明LogonListener属性 private LogonActivity la; /** * LogonListener构造方法 * * @param la * 当前页面 */ public LogonListener(LogonActivity la) { this.la = la; } /** * @Override 实现点击动作的方法 * @param v * 事件源对象 */ public void onClick(View v) { // 仅给按钮添加了监听器,故事件源一定是按钮对象 Button but = (Button) v; // 获取按钮上的文本 String str = but.getText().toString(); // 对文本进行判断 if (str.equals("登录")) { System.out.println("点击的是登录按钮"); } else if (str.equals("重置")) { System.out.println("点击的是重置按钮"); } } }
界面跳转
在安卓中,我们会用到Intent这个类来实现实现界面的跳转,并且Intent组件能够将参数从A-Activity传递到B-Activity。下面是实现页面跳转的步骤:
1.创建Intent对象
2.设置出发地——>目的地,调用.setClass(context packageContext, class cls)方法。其中packageContext为上下文对象,即当前界面对象【或称为出发地】,cls需要跳转的界面类【或称为目的地】。(在这里,我们也可以说是将参数packageContext,即A-Activity对象传递到cls,即B-Activity中)
3.启动Activity.startActivity(intent);
代码修改为:
public void onClick(View v) { // 仅给按钮添加了监听器,故事件源一定是按钮对象 Button but = (Button) v; // 获取按钮上的文本 String str = but.getText().toString(); // 对文本进行判断 if (str.equals("登录")) { // 创建intent对象 Intent intent = new Intent(); // 创建目标路径 intent.setClass(la, SecondActivity.class); // 当前页面启动这个目标路径对象 la.startActivity(intent); } else if (str.equals("重置")) { System.out.println("点击的是重置按钮"); } }
Activity生命周期
最先打开app的时候:
点击登录按钮之后,跳转页面未调用前一个Activity.finish(),且此时第二个界面充满屏幕:
当点击返回后:
再次按返回:
但是长按home键,发现进程仍未关闭:
经上面测试可以得出下述结论:
Activity生命周期:
/ ********** 第一个阶段——运行 **********/
OnCreat():创建——加载安卓页面,得到页面上的组件,给组件添加监听器方法。 第一个Activity
OnStart():启动——能够显示页面
OnResume():交互——能够放在栈的最顶端
/ ********** Activity的第二个阶段——暂停/停止 **********/
// 跳转到另外一个页面,将原来的Activity暂停,调用另一个Activity的第一阶段的方法
OnPause():暂停 第一个Activity
OnCreat():创建——加载安卓页面,得到页面上的组件,给组件添加监听器方法。 第二个Activity
OnStart():启动——能够显示页面
OnStop():停止 第一个Activity(新打开的Activity如果没有占满整个屏幕时,不会调用此方法——仅为熊哥认知,没有得到代码证明!!!)
【OnDestoy():销毁——调用finish方法【登录界面】】
/ ********** Activity第三阶段——销毁 **********/
OnPause():暂停 第二个Activity
OnReStart():再次启动 第一个Activity
OnStart():启动——能够显示页面
OnResume():交互——能够放在栈的最顶端
OnStop():停止 第二个Activity
OnDestoy():销毁