Android界面跳转以及界面之间的传值

页面跳转就是我们从一个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;
}
return super.onKeyDown(keyCode,event)
}
触摸监听
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;
}
return super.onTouchEvent(event);
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章