界面之间的跳转
偷偷小懒,今天就不再创建一个新的工程实现所描述的内容了。我使用的第一个界面就是上篇博文介绍的登录界面,依照我们平时的认知,在当前界面上未发生任何动作的时候,界面是不会发生任何变化的。但当人为在某些图形组件上发生了一定的动作之后,可能会使页面发生跳转或者更改现象。这不难让我们想到事件这一概念。
图形组件添加监听器
根据上篇博文,大家了解到设计图形界面可以通过拖拽组件或布局、修改代码实现。当需要为图形界面添加监听器或者实现其他非图形化功能时,我们只能回归到原来的编程方式——代码编程。一般我们进行编程的文件在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():销毁