android之Intent機制詳解
阿新 • • 發佈:2019-02-19
Intent是一種執行時繫結(run-time binding)機制,它能在程式執行過程中連線兩個不同的元件。如實現兩個activity之間的連線很資料通訊
startActivity僅僅是兩個activity之間的單向資料互動,若想實現雙向互動時可以使用startActivityForResultIntent 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");
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( )方法。
在Activity2中回傳資料時採用setResult方法,並且之後要呼叫finish方法。@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; } }
this.setResult(RESULT_OK, intent); //intent為Activity1傳來的intent
finish();//此處一定要呼叫finish()方法