Intent,又稱爲意圖,是一種運行時綁定機制,它能在程序運行的過程當中連接兩個不一樣的組件(Activity、Service、BroadcastReceiver)。經過Intent,程序能夠向Android表達某種請求或意願,Android會根據意願的內容選擇適當的組件來請求。android
在這些組件之間的通信中,主要是由Intent協助完成的。Intent負責對應用中一次操做的動做、動做涉及數據、附加數據進行描述,Android則根據此Intent的描述,負責找到對應的組件,將Intent傳遞給調用的組件,並完成組件的調用。所以,Intent在這裏起着一個媒體中介的做用,專門提供組件互相調用的相關信息,實現調用者與被調用者之間的解耦。app
經過一個例子來展現Activity中使用Intent導向新Activity並傳遞數據。此程序僅在兩個頁面之間相互跳轉,可是每次跳轉會建立新的Activity,因此在startActivity()以後須要調用finish()銷燬當前Activity,若是不銷燬,屢次跳轉後,程序的Activity棧中會存放多個Activity,點擊設備的返回按鈕,會發現會一直向後退。ide
主要步驟:函數
示例代碼佈局
步驟2--3:this
1 public class MainActivity extends Activity { 2 private TextView textView; 3 private Button btn; 4 @Override 5 protected void onCreate(Bundle savedInstanceState) { 6 super.onCreate(savedInstanceState); 7 setContentView(R.layout.activity_main); 8 9 textView=(TextView)findViewById(R.id.textView1); 10 btn=(Button)findViewById(R.id.button1); 11 btn.setOnClickListener(new View.OnClickListener() { 12 @Override 13 public void onClick(View v) { 14 // Intent構造函數:Intent來源;Intent目的。 15 Intent intent =new Intent(MainActivity.this,otherActivity.class); 16 intent.putExtra("data", "當前是頁面2,信息來自頁面1"); 17 startActivity(intent);//啓動Activity
18 finish();
18 } 19 }); 20 } 21 }
步驟4--5:spa
1 public class otherActivity extends Activity { 2 private Button btn; 3 private TextView textView; 4 @Override 5 protected void onCreate(Bundle savedInstanceState) { 6 // TODO Auto-generated method stub 7 super.onCreate(savedInstanceState); 8 setContentView(R.layout.other); 9 10 textView=(TextView)findViewById(R.id.textView2); 11 btn=(Button)findViewById(R.id.button2); 12 13 //經過Activity.getIntent()獲取當前頁面接收到的Intent。 14 Intent intent =getIntent(); 15 //getXxxExtra方法獲取Intent傳遞過來的數據 16 String msg=intent.getStringExtra("data"); 17 textView.setText(msg); 18 19 btn.setOnClickListener(new View.OnClickListener() { 20 @Override 21 public void onClick(View v) { 22 Intent intent=new Intent(otherActivity.this,MainActivity.class); 23 startActivity(intent); 24 finish(); 25 } 26 }); 27 } 28 }
步驟7:code
1 <application 2 android:allowBackup="true" 3 android:icon="@drawable/ic_launcher" 4 android:label="@string/app_name" 5 android:theme="@style/AppTheme" > 6 <activity 7 android:name="cn.bgxt.IntentForAc.MainActivity" 8 android:label="@string/app_name" > 9 <intent-filter> 10 <action android:name="android.intent.action.MAIN" /> 11 <category android:name="android.intent.category.LAUNCHER" /> 12 </intent-filter> 13 </activity> 14 <activity android:name=".otherActivity"/> 15 </application>
從Activity中返回數據xml
上面例子中只是介紹了Activity經過Intent傳遞數據,然而在實際應用中,不單單須要向Activity傳遞數據,並且要從Activity中返回數據,雖然返回數據和傳遞數據相似,可是仍是有部分區別。blog
主要區別以下:
經過一個例子說明從Activity返回數據。此程序有兩個Activity,在MainActivity中輸入加法運算的計算數,跳轉到otherActivity中輸入計算結果,並在點擊返回後,把計算結果輸出到MainActivity中。
示例代碼
MainActivity:
1 public class MainActivity extends Activity { 2 3 private EditText one,two,result; 4 private Button btn; 5 6 @Override 7 protected void onCreate(Bundle savedInstanceState) { 8 super.onCreate(savedInstanceState); 9 setContentView(R.layout.activity_main); 10 11 one=(EditText)findViewById(R.id.one); 12 two=(EditText)findViewById(R.id.two); 13 result=(EditText)findViewById(R.id.result); 14 btn=(Button)findViewById(R.id.btnGo); 15 btn.setOnClickListener(new View.OnClickListener() { 16 17 @Override 18 public void onClick(View v) { 19 // TODO Auto-generated method stub 20 int ione=Integer.parseInt(one.getText().toString()); 21 int itwo=Integer.parseInt(two.getText().toString()); 22 23 Intent intent=new Intent(MainActivity.this, otherActivity.class); 24 intent.putExtra("one", ione); 25 intent.putExtra("two", itwo); 26 27 //啓動須要監聽返回值的Activity,並設置請求碼:requestCode 28 startActivityForResult(intent, 1); 29 } 30 }); 31 32 } 33 34 @Override 35 protected void onActivityResult(int requestCode, int resultCode, Intent data) { 36 super.onActivityResult(requestCode, resultCode, data); 37 //當otherActivity中返回數據的時候,會響應此方法 38 //requestCode和resultCode必須與請求startActivityForResult()和返回setResult()的時候傳入的值一致。 39 if(requestCode==1&&resultCode==2) 40 { 41 int three=data.getIntExtra("three", 0); 42 result.setText(String.valueOf(three)); 43 } 44 } 45 46 @Override 47 public boolean onCreateOptionsMenu(Menu menu) { 48 // Inflate the menu; this adds items to the action bar if it is present. 49 getMenuInflater().inflate(R.menu.main, menu); 50 return true; 51 } 52 }
otherActivity:
1 public class otherActivity extends Activity { 2 TextView tvShow; 3 EditText etResult; 4 @Override 5 protected void onCreate(Bundle savedInstanceState) { 6 super.onCreate(savedInstanceState); 7 setContentView(R.layout.other); 8 9 tvShow=(TextView)findViewById(R.id.tvShow); 10 etResult=(EditText)findViewById(R.id.etResult); 11 12 Intent intent=getIntent(); 13 int a=intent.getIntExtra("one", 0); 14 int b=intent.getIntExtra("two", 0); 15 tvShow.setText(a+" + "+b+" = "+" ? "); 16 17 Button btnResult=(Button)findViewById(R.id.btnReturn); 18 btnResult.setOnClickListener(new View.OnClickListener() { 19 @Override 20 public void onClick(View v) { 21 //新聲明一個Intent用於存放放回的數據 22 Intent i=new Intent(); 23 int result=Integer.parseInt(etResult.getText().toString()); 24 i.putExtra("three", result); 25 setResult(2, i);//設置resultCode,onActivityResult()中能獲取到 26 finish();//使用完成後結束當前Activity的生命週期 27 } 28 }); 29 } 30 }