android的Activity之間的數據傳遞

首先給你們介紹一下android中的activity:java

一個activity通常表明手機屏幕的一屏,概念至關與網頁。通常來講一個android應用是由一個或多個activity組成,activity直接可進行跳轉,直接也能夠經過回調方法傳遞參數。android

activity之間的參數傳遞:ide

首先咱們新建兩個按鈕,分別在layout1,layout2中,按鈕的id爲btn1,btn2,而後在分別創建兩個activity分別爲Activity1,Activity2。Activity1分別和layout1關聯,Activity2分別和layout2關聯,咱們接下來要作的事情就是在Activity1中把參數傳遞到Activity2中,而後在Activity2運行完成的時候並返回到Activity1的時候,Activity1再從獲取Activity2中參數函數

這是Activity1中的代碼:this

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

成時調用onActivityResult方法code

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

 這是Activity2中的代碼:get

@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等。

相關文章
相關標籤/搜索