Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android應用開發入門(八)Activity中使用Intent傳值

Android應用開發入門(八)Activity中使用Intent傳值

編輯:Android開發實例

  Intent,又稱為意圖,是一種運行時綁定機制,它能在程序運行的過程中鏈接兩個不同的組件(Activity、Service、BroadcastReceiver)。通過Intent,程序可以向Android表達某種請求或意願,Android會根據意願的內容選擇適當的組件來請求。

    在這些組件之間的通訊中,主要是由Intent協助完成的。Intent負責對應用中一次操作的動作、動作涉及數據、附加數據進行描述,Android則根據此Intent的描述,負責找到對應的組件,將Intent傳遞給調用的組件,並完成組件的調用。因此,Intent在這裡起著一個媒體中介的作用,專門提供組件互相調用的相關信息,實現調用者與被調用者之間的解耦。

  通過Intent請求Activity,必須在AndroidManifest.xml文件中對被請求的Activity新增標簽配置,否則會導致錯誤。       Intent一般包含兩個主要信息,action、data。
  • action:表示這個Intent此次操作的動作。
  • data:表示這次動作涉及的數據。

 

  通過一個例子來展示Activity中使用Intent導向新Activity並傳遞數據。此程序僅在兩個頁面之間相互跳轉,但是每次跳轉會創建新的Activity,所以在startActivity()之後需要調用finish()銷毀當前Activity,如果不銷毀,多次跳轉後,程序的Activity棧中會存放多個Activity,點擊設備的返回按鈕,會發現會一直向後退。

  主要步驟:

  1. 新建Android項目,增加新布局文件other.xml,新增Activity類otherActivity.class,用於接受Intent並展示other.xml。
  2. 在MainActivity類中,聲明一個Intent類,通過Intent的構造函數指明源和目標。
  3. 獲得Intent後,使用Intent.putExtra()方法對其傳入數據。
  4. 調用Activity.startActivity啟動這個Intent。
  5. 在otherActivity類中,使用Activity.getIntent()獲得當前Activity的Intent。
  6. 獲得Intent後,使用Intent.getXxxExtra()方法獲得其中保存的數據。
  7. 在AndroidManifest.xml配置otherActivity節點。

示例代碼

步驟2--3:

  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();  
  19.             }  
  20.         });          
  21.     }  

步驟4--5:

  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.     }  

步驟7:

  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中返回數據

  上面例子中只是介紹了Activity通過Intent傳遞數據,然而在實際應用中,不僅僅需要向Activity傳遞數據,而且要從Activity中返回數據,雖然返回數據和傳遞數據類似,但是還是有部分區別。

  主要區別如下:

  1. 傳遞數據需要使用Activity.startActivityForResult()方法啟動Activity,需要傳遞請求碼,而不是Activity.startActivity()。
  2. 返回數據的時候,調用Activity.setResult()方法設置返回Intent以及返回碼。
  3. 需要重寫源Activity的onActivityResult()方法以便於接受返回的Intent,在onActivityResult()中會判斷請求碼和響應碼。

  通過一個例子說明從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.     }  

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.     }  

 

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved