1. 程式人生 > >android之Intent機制詳解

android之Intent機制詳解

Intent是一種執行時繫結(run-time binding)機制,它能在程式執行過程中連線兩個不同的元件。如實現兩個activity之間的連線很資料通訊

Intent it = new Intent(Activity1.this, Activity2.class);
Bundle bundle=new Bundle();
bundle.putString("name", "zhangsan");
it.putExtras(bundle); // 同it.putExtra("name", "zhangsan");putExtra新增附件資訊
startActivity(it);
對於資料的獲取可以採用:
Bundle bundle=getIntent().getExtras();
String name=bundle.getString("name");
startActivity僅僅是兩個activity之間的單向資料互動,若想實現雙向互動時可以使用startActivityForResult

startActivityForResult的原型中相關函式

startActivityForResult(Intent intent, Int requestCode)
setResut(int resultCode, Intent intent)
onActivityResult(int requestCode, int resultCode, Intent intent)

簡單來說,startActivityForResult可以一次性完成這樣一項任務:當程式執行到這段程式碼的時候,從Activity1跳轉到下一個Activity2,而當這個Activity2呼叫了finish()方法以後(finish方法用於結束當前的activity,返回到上一個activity。),程式會自動跳轉回Activity1,並呼叫前一個Activity1中的onActivityResult( )方法。

@Override
	protected void onCreate(Bundle arg0) {在Activity2中回傳資料時採用setResult方法,並且之後要呼叫finish方法。
		// TODO Auto-generated method stub
		super.onCreate(arg0);
		setContentView(R.layout.activity_welcome);		
		Intent it = new Intent(Activity1.this, Activity2.class);
		Bundle bundle=new Bundle();
		bundle.putString("name", "zhangsan");
		it.putExtras(bundle); // 同it.putExtra("name", "zhangsan");putExtra新增附件資訊
			finish();
		
	}	
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		switch (resultCode) { //resultCode為回傳的標記,我在Activity2中回傳的是RESULT_OK
		   case RESULT_OK:
		    Bundle bundle2=data.getExtras(); //data為Activity2中回傳的Intent
		    String name2=b.getString("name2");//str即為回傳的值
		    break;
		default:
		    break;
		    }
	}
在Activity2中回傳資料時採用setResult方法,並且之後要呼叫finish方法。
this.setResult(RESULT_OK, intent); //intent為Activity1傳來的intent
finish();//此處一定要呼叫finish()方法