首先給大家介紹一下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中的代碼:
view sourceprint?01 <P><SPAN> @Override
02 public void onCreate(Bundle savedInstanceState) {
03 super.onCreate(savedInstanceState);
04 setTitle("這是activity1");
05 setContentView(R.layout.layout1);
06
07 //單擊button2
08 Button btn1 = (Button) findViewById(R.id.btn1);
09 btn2.setOnClickListener(new Button.OnClickListener() {
10 @Override
11 public void onClick(View v) {
12 Intent intent1 = new Intent(MainActivity.this, Activity3.class);
13 intent1.putExtra("activity1", "資料來自activity1");
14 startActivityForResult(intent1, REQUEST_CODE);
15 }
16 });
17 } </SPAN></P>
18 <P>成時調用onActivityResult方法</P>
19 <P><SPAN> @Override
20 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
21 if(requestCode == REQUEST_CODE){
22 if(resultCode == RESULT_CANCELED){
23 setTitle("取消");
24 }else if(resultCode == RESULT_OK){
25 System.out.println("這裡已經執行...");
26 String txt = "";
27 Bundle extras = data.getExtras();
28 if(extras != null){
29 txt = extras.getString("store");
30 }
31 setTitle("這裡是</SPAN><SPAN style="FONT-SIZE: 13px; LINE-HEIGHT: 19px; FONT-FAMILY: 'sans serif', tahoma, verdana, helvetica; WHITE-SPACE: normal; BACKGROUND-COLOR: #ffffff">Activity1</SPAN><SPAN>:" + txt);
32 }
33 }
34 }</SPAN></P>
這是Activity2中的代碼:
view sourceprint?01 <SPAN>@Override
02 protected void onCreate(Bundle savedInstanceState) {
03 super.onCreate(savedInstanceState);
04 setTitle("這是activity2");
05 setContentView(R.layout.layout2);
06 Bundle bundle = getIntent().getExtras();
07 if(bundle != null){
08 setTitle("這裡是Activity2:" + bundle.getString("</SPAN><SPAN style="LINE-HEIGHT: 19px">activity1</SPAN>"));<SPAN> }
09
10 Button btn = (Button) findViewById(R.id.btn2);
11 btn.setOnClickListener(new Button.OnClickListener() {
12 @Override
13 public void onClick(View v) {
14 Bundle bundle = new Bundle();
15 bundle.putString("store", "這是Activity2中傳遞過來的資料");
16 Intent mIntent = new Intent();
17 mIntent.putExtras(bundle);
18 setResult(RESULT_OK, mIntent);
19 finish();
20 }
21 });
22 }</SPAN>
首先解釋一下startActivity()和startActivityForResult()這兩種方法的不同:前者是啟動一個新的Activity,當新的Activity執行完成後不會執行回呼函數,
當然也不會有任何的傳回值;後者也是啟動一個新的Activity,並且當新的Activity運行結束的時候,還必須執行舊的Activity裡面的
回呼函數,這個回呼函數叫做onActivityResult(),其中startActivityForResult()裡面有兩個參數,第一個參數是你聲明的
Intent,第二個參數是請求碼,如果請求碼大於0的時候,當新的Activity結束的時候,這個請求碼返回到onActivityResult(),
然後通過不同的請求碼在回呼函數onActivityResult()中針對不同的傳回值執行不同的代碼操作。其中onActivityReuslt()這也是
一個回呼函數,當新的Activity執行完成後,還必須執行舊的Activity的這個回呼函數。
作者“緣敘的部落格”