页面跳转就是我们从一个Activity跳到到另一个Activity,想弄明白一个Activity具体怎么跳转到另一个Activity的,就必须明白Activity具体怎么在内存中存放的。我们都知道数据的在内存中的存放形式有多种,比如堆、栈、队列、树等等,而Activity在内存中存放的形式就是栈,而栈的特点就是先进后出,所以我们一次打开n个界面后,按返回键,界面是按着打开的顺序依次回退回去的。
在代码中我们具体该怎么实现一个界面跳转到另一个界面的呢?我们都知道Activity是四大组件之一,而四大组件是都需要在AndroidManifest中注册过后才能使用的,所以在我们创建另一个Activity类时,一定要在xml的配置文件中注册一下,当然每一个Activity都缺少不了自己独有的布局文件。下面是配置文件的一些相关信息:
AndroidManifest.xml文件是应用的清单配置文件
* 应用的唯一标识的包名,只在AndroidManifest.xml中存在,package
* application标签的作用是,配置应用的基本信息
* icon:应用图标 lable:应用的名称 theme:应用的主题
* activity标签的作用是注册activity
* name:用来标识activity的路径和类名,包名+类名 .类名:当前的activity就在默认的包下
* Activity的启动模式:standard:默认的启动方式,把activity放入栈中,先进后出
* SingleTop:若已经存在的activity,则把上层的其他activity删除,把启动的这个置顶
* SingleInstance:在内存中只存在一个activity
* SingleTask:类似于SingleTop
当这一切都创建好以后,我们该怎么实现具体跳转代码呢?这个时候我们还需要用到Intent:
Activity的跳转步骤
* 1.新建一个Activity,并且建立一个与之匹配的布局,并绑定
* 2.在AndroidManifest中注册Activity
* 3.在某一个特定的环境下,建立intent意图对象,在构造方法中传入要跳转的Activity Intent intent=new Intent(MainActivity.this,Myactivity.class);
* 4.启动意图Intent对象
* startActivity(intent)
具体代码实现如下:
Intent intent_deter=new Intent(MainActivity.this,loginActivity.class);
startActivity(intent_deter);
* 利用Intent携带数据传值
* 1.携带:调用Intent的putExtra(key,value)方法,用于是当前Intent携带数据
* 2.得到:在目标Activity中,调用getIntent().getExtras().get(key)方法可以得到Intent中携带的内容或者利用getIntent().getStringExtra(key)方法
*
* A-->B,在B界面中做完某些操作以后,得到结果,返回给A,让A根据返回的数据,更新自己的界面
* 1.A-->B,startActivityForResult(请求码,Intent);Intent用来启动B,传值给B
* 2.在B中做完某些操作之后,得到结果:setResult(返回码,Intent);Intent用来传值给A
* 3.A得到数据,让A根据返回的数据,更新自己的界面:在A中重写onActivityResult(请求码,返回码,Intent)
* 其中,请求码来自于第1步,返回码来自于第2步,Intent来自于第2步
* 4.根据3中的请求码,返回码和Intent,共同来更新A中的UI信息
A界面——>B界面
A:Intent intent_reg=new Intent(MainActivity.this,regActivity.class);
startActivityForResult(intent_reg,1);
B界面——>A界面
一个Button点击事件
btn_suc.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent=new Intent();
if(et_psw.getText().toString().equals(et_repsw.getText().toString()))
{
//获得B界面中的EditText编辑框中的内容
intent.putExtra("name", et_name.getText().toString());
intent.putExtra("psw", et_psw.getText().toString());
setResult(0,intent);
}
//切记,最后一定要调用finish()方法
finish();
}
});
A界面接收B界面中传回来的内容
//这个时候我们需要重写一个onActivityResult方法,这个时候我们就可以根据传回来的值更新A界面了
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
//et_name和et_psw只是名字和B界面中的控件名字一样
et_name.setText(data.getExtras().get("name").toString());
et_psw.setText(data.getExtras().get("psw").toString());
}
Activity内的按键监听,而这个按键监听就死我们手机home按键旁边的那个按键,如果需要用到我们需要重写一个onKeyDown方法:
public boolean onKeyDown(int keyCode, KeyEvent event){
//返回按键监听
if(keyCode==KeyEvent.KEYCODE_BACK){
return true;
}
//Menu按键监听
if(keyCode==KeyEvent.KEYCODE_MENU){
return true;
}
}
触摸监听
public boolean onTouchEvent(MotionEvent event){
//得到当前触摸的坐标X,Y
double getX=event.getX();
double getY=event.getY();
//然后得到当前触摸的状态
//按下状态
if(event.getAction()==MotionEvent.ACTION_DOWN){
return true;
}
//移动状态
if(event.getAction()==MotionEvent.ACTION_MOVE){
return true;
}
//抬起状态
if(event.getAction()==MotionEvent.ACTION_UP){
return true;
}
}