首先給大家介紹一下android中的activity:
一個activity一般代表手機屏幕的一屏,概念相當與網頁。一般來說一個android應用是由一個或多個activity組成,activity直接可進行跳轉,直接也可以通過回調方法傳遞參數。
activity之間的參數傳遞:
首先我們新建兩個按鈕,分別在layout1,layout2中,按鈕的id爲btn1,btn2,然後在分別建立兩個activity分別爲Activity1,Activity2。Activity1分別和layout1關聯,Activity2分別和layout2關聯,我們接下來要做的事情就是在Activity1中把參數傳遞到Activity2中,然後在Activity2運行完成的時候並返回到Activity1的時候,Activity1再從獲取Activity2中參數。
這是Activity1中的代碼:
@Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTitle("這是activity1");
setContentView(R.layout.layout1); //單擊
button2 Button btn1 = (Button) findViewById(R.id.btn1);
btn2.setOnClickListener(new Button.OnClickListener() {
@Override public void onClick(View v) {
Intent intent1 = new Intent(MainActivity.this, Activity3.class); intent1.putExtra("activity1", "數據來自activity1");
startActivityForResult(intent1, REQUEST_CODE);
}
});
}
成時調用onActivityResult方法
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == REQUEST_CODE){
if(resultCode == RESULT_CANCELED){ setTitle("取消"); }
else if(resultCode == RESULT_OK){
System.out.println("這裏已經執行...");
String txt = ""; Bundle extras = data.getExtras();
if(extras != null){ txt = extras.getString("store"); }
setTitle("這裏是Activity1:" + txt);
}
}
}
這是Activity2中的代碼:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTitle("這是activity2");
setContentView(R.layout.layout2);
Bundle bundle = getIntent().getExtras();
if(bundle != null){
setTitle("這裏是Activity2:" + bundle.getString("activity1")); }
Button btn = (Button) findViewById(R.id.btn2);
btn.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
Bundle bundle = new Bundle();
bundle.putString("store", "這是Activity2中傳遞過來的數據");
Intent mIntent = new Intent();
mIntent.putExtras(bundle);
setResult(RESULT_OK, mIntent);
finish();
}
});
}
首先解釋一下startActivity()和startActivityForResult()這兩種方法的不同:前者是啓動一個新的Activity,當新的Activity執行完成後不會執行回調函數,
當然也不會有任何的返回值;後者也是啓動一個新的Activity,並且當新的Activity運行結束的時候,還必須執行舊的Activity裏面的
回調函數,這個回調函數叫做onActivityResult(),其中startActivityForResult()裏面有兩個參數,第一個參數是你聲明的
Intent,第二個參數是請求碼,如果請求碼大於0的時候,當新的Activity結束的時候,這個請求碼返回到onActivityResult(),
然後通過不同的請求碼在回調函數onActivityResult()中針對不同的返回值執行不同的代碼操作。其中onActivityReuslt()這也是
一個回調函數,當新的Activity執行完成後,還必須執行舊的Activity的這個回調函數。
參數傳遞:Activity和Activity之間的參數傳遞是通過Bundle的鍵值對來傳遞,Bundle是對HashMap的重新封裝,但是Bundle只能
存放基本類型,比如:String/int/byte/boolean/char等。