转载请注明出处:http://blog.csdn.net/huiblog/article/details/53222810
在上一篇文章《Activity(Intent-filter详解及跳转)》中,我们讲解了使用Intent进行Activity的简单跳转。这一节我们把Activity跳转时传递数据讲一下。
Activity之间数据传递
Activity跳转之间使用Intent传递数据。
Intent
Intent->
public class Intent implements Parcelable, Cloneable
是一个实现了序列化的类。使用起来比较简单。先来例子:
MainActivity.java
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void testIntent(View view){
Intent intent = new Intent(this, SecondActivity.class);
intent.putExtra("main","你最牛!");//直接将main->"你最牛!"键值对形式存入Intent中
Bundle bundle = new Bundle();//创建bundle对象
bundle.putFloat("lala",f);//将lala->2.234f对应的值存入bundle中
bundle.putBoolean("haha", true);
intent.putExtras(bundle);//将bundle存入Intent中
startActivity(intent);
}
}
SecondActivity.java
public class SecondActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
Intent intent = getIntent();//获取到intent对象
if(intent != null){
String main = intent.getStringExtra("main");//获取存入intent中的main对应的值
Log.e("hui", "SecondActivity收到的数据是:"+main);
}
Bundle bundle = intent.getExtras();//拿到intent中存入的bundle
if(bundle != null){
float lala = bundle.getFloat("lala", f);//拿到bundle中存入的lala对应的值,默认值设为6.6( 如果bund中没有lala对应的值,则返回6.6)
boolean haha = bundle.getBoolean("haha", false);
Log.e("hui", "Bundle收到的lala=:"+lala);
Log.e("hui", "Bundle收到的haha=:"+haha);
}
}
}
结果:
/com.example.asia.testintent E/hui: SecondActivity收到的数据是:你最牛!
/com.example.asia.testintent E/hui: Bundle收到的lala=:
/com.example.asia.testintent E/hui: Bundle收到的haha=:true
分析:
在MainActivity中使用intent.putExtra(“main”,”你最牛!”);了存数据,putExtra是一种键值对存取数据的方法。在这里main对应的数据就是”你最牛!”,将这个值封装到Intent中,然后跳转到SecondActivity后,先使用getIntent拿到存取数据的intent,然后再使用intent.getStringExtra(key)将Intent中封装的key对应的值取出来。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyNwUDN0QDMxIDOxETM2EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
可以看到putExtra有很多重载方法,可以封装八大基本数据类型和字符串以及他们的数组,还有实现了序列化接口的对象,还有Bundle对象。
Bundle
- 发送数据
- 创建bundle对象
-
将数据使用bundle.putFloat(key,value)或bundle.putBoolean(key, value)等等方式将数据存入bundle中
*创建Intent对象, 将bundle对象存入inent对象中
- 拿到数据
- 在目的Activity中getIntent得到intent对象
- 使用 intent.getExtras()拿到bundle对象
- 使用bundle.getFloat(key)之类的拿到key对应的数据
现在我们已经知道了从A跳转到B时,把A中的数据携带到B中该怎么做了。在开发中我们经常会遇到关闭当前Activity把数据返回到上一级Activity的情况。对于这种情况怎么弄呢?Google很屌,当然有办法的。
setResult/onActivityResult
上代码。
在MainActivity中添加代码
private int requestCode = ;
public void setResult_onActivityResult(View view){
Intent intent = new Intent(this, SecondActivity.class);
startActivityForResult(intent, requestCode);
}
/**
* 以startActivity(intent)启动的Activity销毁的Activity返回的数据返回到这里
* @param requestCode startActivityForResult(intent, requestCode)中的requestCode
* @param resultCode setResult(int resultCode, Intent data)中的resultCode
* @param data 返回的数据封装在这里
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(data != null){
String fanhui = data.getStringExtra("fanhui");
Log.e("hui", "返回的数据是:"+fanhui);
}
Log.e("hui", "requestCode=:"+requestCode);
Log.e("hui", "resultCode:"+resultCode);
}
在SecondActivity的onCreate中添加如下代码
Intent intent2 = new Intent();
intent2.putExtra("fanhui", "返回的数据是我最帅");
/**
* void setResult(int resultCode, Intent data)
* resultCode:返回的结果码,对应void onActivityResult(int requestCode, int resultCode, Intent data)中的resultCode
* data:将返回的数据封装到data中
*/
setResult(, intent2);
结果:
OK!Activity之间传递数据就讲到这了。↖(^ω^)↗
code在这