標籤:android style blog io ar color 使用 sp for
上一章我們溫習了Activity的建立,以及各生命週期,這一章我們主要學習Activity的跳轉,以及Activity之間的資料傳遞
一、Activity跳轉:
Activity之間的單純跳轉非常簡單,只需要建立兩個Activity,然後使用startActivity(intent)來進行跳轉,看下代碼:
Intent uio=new Intent(thisActivityclass,ActivityBclass);startActivity(uio);
Intent是什嗎?
Android中提供了Intent機制來協助應用間的互動與通訊,Intent負責對應用中一次操作的動作、動作涉及資料、附加資料進行描 述,Android則根據此Intent的描述,負責找到對應的組件,將 Intent傳遞給調用的組件,並完成組件的調用。Intent不僅可用於應用程式之間,也可用於應用程式內部的Activity/Service之間的 互動。因此,Intent在這裡起著一個媒體中介的作用,專門提供組件互相調用的相關資訊,實現調用者與被調用者之間的解耦。
二、Activity間資料傳遞:
以下我們完整編寫一個Activity跳轉傳遞資料及返回參數的例子,從Activity A中點擊一個按鈕,跳轉至Activity B,Activity B中有兩個按鈕,分別點擊兩個按鈕,介面返回到Activity A中並使用toast展示不同的返回參數
1.在Activity A中,大量新增資料至Bundle,並將Bundle添加進intent
Intent in1=new Intent(this,ActivityB.class); Bundle bun1=new Bundle(); bun1.putString("姓名", "baihua"); bun1.putString("年齡", "24"); in1.putExtras(bun1);
2.Activity A的按鈕點擊事件中進行Activity跳轉,並使用startActivityForResult(Intent intent, int requestCode)方法開啟新的Activity,新的Activity關閉後會向前面的Activity傳回資料
startActivityForResult(in1,30)
3.Acitivity B傳回值後,我們需要得到新Activity的回傳資料進行邏輯處理,需要重寫onActivityResult(int requestCode,int resultCode,Intent data),這裡我們定義一下功能需求,如果請求碼是30,我們點擊Activity B中的按鈕,返回學號30的學生的資訊,如果請求碼是31,我們點擊Activity B中的按鈕,返回學號31的學生的資訊;Activity B中,點擊按鈕1,返回該學號對應學生的姓名,點擊按鈕2,返回該學號對應學生的年齡
首先我們處理Activity B中的資料返回
public void baihinfo(View v) //對應學號學生的姓名 { Intent in1=new Intent(); in1.putExtra("姓名", "baih"); //in1.putExtra("年齡", "24"); setResult(2, in1); //使用setResult返回資料到Activity A中,前一個參數為返回結果碼 finish(); //函數處理完後關閉該Activity } public void zzzinfo(View v) //對應學號學生的年齡 { Intent in2=new Intent(); //in2.putExtra("姓名", "zzz"); in2.putExtra("年齡", "28"); setResult(1, in2); finish(); //函數處理完後關閉該Activity }
4.處理Activity A中得到Activity B的返回結果碼的邏輯,重寫onActivityResult
public void onActivityResult(int requestCode,int resultCode,Intent data) { if(requestCode==30) //判斷如果Activity A點擊事件中的請求碼是30,則返回學號30的學生 { if(resultCode==1) //判斷如果返回結果碼為1,就使用.getExtras().getString()擷取30學生的姓名,為其他就擷取年齡,這裡邏輯可以更細,不多寫了 { Bundle er=data.getExtras(); String t=er.getString("姓名"); Log.e("baih",t); Toast.makeText(MainActivity.this, t, 2000).show(); } else{ Bundle san=data.getExtras(); String y=san.getString("年齡"); Log.e("baih", y); Toast.makeText(MainActivity.this,y, 2000).show();; } } else{ if(requestCode==31) //判斷如果Activity A點擊事件中的請求碼是31,則返回學號31的學生 { if(resultCode==1) { Bundle er1=data.getExtras(); String x=er1.getString("姓名"); Log.e("baih",x); Toast.makeText(MainActivity.this, x, 2000).show(); } else{ Bundle san1=data.getExtras(); String z=san1.getString("年齡"); Log.e("baih", z); Toast.makeText(MainActivity.this,z, 2000).show();; } } }
變數沒有走規則,其實這個位置,主要是想介紹兩個參數,requestCode和resultCode
requestCode是請求碼,使用startActivityForResult(Intent intent, int requestCode)方法開啟新的Activity,我們需要為startActivityForResult()方法傳入一個請求碼(第二個參 數)。請求碼的值是根據業務需要由自已設定,用於標識請求來源。例如:一個Activity有兩個按鈕,點擊這兩個按鈕都會開啟同一個Activity, 不管是那個按鈕開啟新Activity,當這個新Activity關閉後,系統都會調用前面Activity的onActivityResult(int requestCode, int resultCode, Intent data)方法。在onActivityResult()方法如果需要知道新Activity是由那個按鈕開啟的,並且要做出相應的業務處理
resultCode是結果碼,在一個Activity中,可能會使用startActivityForResult()方法開啟多個不同的Activity處理不同的業務,當這些新 Activity關閉後,系統都會調用前面Activity的onActivityResult(int requestCode, int resultCode, Intent data)方法。為了知道返回的資料來自於哪個新Activity
兩個很重要的參數,負責控制Activity資料轉送之間的邏輯控制及判斷
Activity傳輸資料主要使用intent.putExtra(String key,value)進行單個參數傳遞,或者將資料參數集中寫入bundle中,使用intent.putExtra(Bundle extras)進行集中傳輸
Android開發學習筆記之四大組件---Activity的跳轉,資料傳遞(二)