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);
}

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