Android的Activity之間的數據傳遞

首先給大家介紹一下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等。

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