Android中Intent數據傳遞

轉自:http://blog.sina.com.cn/s/blog_6afeac500100y157.html

(1)首先是Activity的簡單跳轉:


          Activity的切換一般是通過Intent來實現的,Intent是一個Activity到達另一個Activity的引路者,它描述了起點(當前Activity)和終點(目標Activity)。一個簡單Intent實現如下:         

 
Intent intent = new Intent();                           //創建一個Intent對象   
intent.setClass(activity1.this, activity2.class);   //描述起點和目標   
startActivity(intent);                                     //開始跳轉 
        

         (2)通常,我們在Activity的切換中,希望把前一個Activity的某些數據傳遞給下一個Activity。這時,我們可以藉助Bundle來實現。Bundle,相當於數據存儲包,用於存放我們想要轉達的數據。打個比方,Intent就像一封郵件,裏面有送信人地址(原始Activity),也有收信人地址(目標Activity),而Bundle就是附件也可看做是信件內容。下面是它的簡單實現:

          a、Activity1發送:    

 
Intent intent = new Intent();   
intent.setClass(activity1.this, activity2.class);   //描述起點和目標   
Bundle bundle = new Bundle();                           //創建Bundle對象   
bundle.putString("something", "Activity1發來的數據");     //裝入數據   
intent.putExtras(bundle);                                //把Bundle塞入Intent裏面   
startActivity(intent);                                     //開始切換 
                          
           

          b、Activity2接受從Activity1發來的數據:

          

 
Intent intent = this.getIntent();        //獲取已有的intent對象   
Bundle bundle = intent.getExtras();    //獲取intent裏面的bundle對象   
string = bundle.getString("something");    //獲取Bundle裏面的字符串 

         (3)解決了如何傳遞數據問題,那麼下一個問題是如何接受從目標Activity返回的處理結果。這裏有兩種方式,一是在onRestart方法(onRestrart表示重啓Activity時激發的事件,具體看上一篇的生命週期)裏面接受處理結果,方法實現和Activity2接受從Activity1發來的數據處理一樣。另一種方式,是採用應答模式切換。這裏,主要下第二種方式。應答模式切換和普通的切換不同在於,普通的是有去沒回,應答則是有來有往。代碼實現也不一樣:1、從Activity1切換到Activity2:startActivityForResult(intent,0);2、從Activity2返回到Activity1:setResult(RESULT_OK, intent)。3、接受返回結果:protected void onActivityResult()。具體代碼如下;

           a、從Activity1切換到Activity2:          

 
Intent intent = new Intent();    
intent = intent.setClass(ActivityIntent.this, AnotherActivity.class);    
Bundle bundle = new Bundle();    
bundle.putString("string", et_string.getText().toString());    
intent.putExtras(bundle);    
startActivityForResult(intent,0);       //只有這裏不同    
 //ActivityIntent.this.finish();  //不能用finish,會觸發onDestroy();  

           b、從Activity2返回到Activity1:

Intent intent = new Intent();   
intent = intent.setClass(AnotherActivity.this, ActivityIntent.class);   
Bundle bundle = new Bundle();   
bundle.putInt("result", "Activity2的處理結果");   
intent.putExtras(bundle);       
AnotherActivity.this.setResult(RESULT_OK, intent);   //RESULT_OK是返回狀態碼   
AnotherActivity.this.finish(); //會觸發onDestroy();  

           c、Activity1接受Activity2的返回結果:         

protected void onActivityResult(int requestCode, int resultCode, Intent data) {    
                   super.onActivityResult(requestCode, resultCode, data);    
                    switch(resultCode) { //根據狀態碼,處理返回結果    
                    case RESULT_OK:     
                          Bundle bundle =data.getExtras();   //獲取intent裏面的bundle對象    
                              String result = bundle.getInt("result");     
                    break;       
                    default:    
                    break;    
                    }         
   
             } 

發佈了22 篇原創文章 · 獲贊 15 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章