Intent数据传递(转)

来源:互联网 发布:摄影作品 知乎 编辑:程序博客网 时间:2024/05/18 13:44

(1)首先是Activity的简单跳转:


 
        Activity的切换一般是通过Intent来实现的,Intent是一个Activity到达另一个Activity的引路者,它描述了起点(当前Activity)和终点(目标Activity)。一个简单Intent实现如下:         

 
Intentintent = newIntent();                          //创建一个Intent对象   
intent.setClass(activity1.this,activity2.class);  //描述起点和目标   
startActivity(intent);                                    //开始跳转 
 
       

        (2)通常,我们在Activity的切换中,希望把前一个Activity的某些数据传递给下一个Activity。这时,我们可以借助Bundle来实现。Bundle,相当于数据存储包,用于存放我们想要转达的数据。打个比方,Intent就像一封邮件,里面有送信人地址(原始Activity),也有收信人地址(目标Activity),而Bundle就是附件也可看做是信件内容。下面是它的简单实现:

         a、Activity1发送:    

 
Intentintent = newIntent();   
intent.setClass(activity1.this,activity2.class);  //描述起点和目标   
Bundlebundle = newBundle();                          //创建Bundle对象   
bundle.putString("something","Activity1发来的数据");    //装入数据   
intent.putExtras(bundle);                               //把Bundle塞入Intent里面   
startActivity(intent);                                    //开始切换 
 
                         
 
          

         b、Activity2接受从Activity1发来的数据:

          

 
Intentintent =this.getIntent();       //获取已有的intent对象   
Bundlebundle =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 = newIntent(); 
   
intent = intent.setClass(ActivityIntent.this,AnotherActivity.class); 
   
Bundle bundle = newBundle(); 
   
bundle.putString("string",et_string.getText().toString()); 
   
intent.putExtras(bundle); 
   
startActivityForResult(intent,0); 
     //只有这里不同    
 
//ActivityIntent.this.finish(); //不能用finish,会触发onDestroy();  

          b、从Activity2返回到Activity1:

Intentintent = newIntent();   
intent =intent.setClass(AnotherActivity.this,ActivityIntent.class);   
Bundlebundle = newBundle();   
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) {//根据状态码,处理返回结果    
 
                  caseRESULT_OK:     
 
                        Bundle bundle=data.getExtras();  //获取intent里面的bundle对象    
 
                            String result =bundle.getInt("result");     
 
                  break;       
 
                  default:    
 
                  break;    
 
                          
 
  
 
           

                     

          (4)、从Activity2中返回到Activity1(在Activity1切换到Activity2时,调用了finish方法),你会发现你在Activity1以前的数据全没了,简单的说就是数据被没有保留下来。因为finish方法,会触发onDestroy(),使得Activity1销毁。下一次再来到Activity1时,是全新的Activity1,以往的数据当然不在。如果想保留切换前的状态,可以采用两种方式:1、切换时,不调用finish()方法。2、采用SharedPreferences来保存数据。SharedPreferences是一个轻量级存储类,主要用于保存一些窗体的状态,如文本框值、按钮状态等等,类似于Session。一般在onPause()方法里面保存数据,在onResume()里面提取数据。实现如下:

        a、保存数据          

 
//暂停:onStart()->onResume()->onPause() 
   
 
  @Override       
 
   protectedvoid onPause(){          
 
      super.onPause();    
 
      Log.e("Lifecycle_Activity1","onPause()");    
 
           
 
      //把数据保存到类似于Session之类的存储集合里面    
 
      SharedPreferences.Editor saveData =getPreferences(0).edit();    
 
      saveData.putString("value",et_string.getText().toString());    
 
      saveData.commit();    
 
   
 

        b、提取数据         

 
//重启:onStart()->onResume() 
   
 
  @Override       
 
   protectedvoid onResume(){         
 
      super.onResume();    
 
      Log.e("Lifecycle_Activity1","onResume()");    
 
           
 
      //从共享数据存储对象中获取所需的数据    
 
      SharedPreferences getData =getPreferences(0);    
 
      String value = getData.getString("value",null);    
 
      if(value != null){    
 
          et_string.setText(value);    
 
         
 
  

0 0
原创粉丝点击