Activity与Activity之间很多情况下都需要进行数据的传递,下面就用几个简单的例子来看一下。

(一).一个Activity启动另一个Activity并将数据传递到这个Activity当中

思路:1.通过Intent进行数据的传递,Intent作为数据的载体。
2.首先将要传递的数据放入到Intent当中。这里用到了Intent中的putExtra()方法,这个方法有一系列的重载。
3.启动另一个Activity后将数据从Intent中取出来。这里用到了getStringExtra()方法,这个方法同样有一系列的重载。 MainActivity中的核心代码:
 public class MainActivity extends Activity {

     @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main); findViewById(R.id.SwitchSecondAty).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String data1 = "Data Transfer";
Intent intent1 = new Intent(MainActivity.this , SecondActivity.class);
//put data in the Intent
intent1.putExtra("AimData" , data1);
startActivity(intent1);
}
});
}
}
  putExtra()方法里面是一个键值对参数,第一个参数是键(“AimData”),用于后面SecondActivity中从Intent中取值,第二个参数是真正要传递的数据(data1)。

SecondActivity中的核心代码:
 public class SecondActivity extends Activity {

     @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_second); //get data from Intent
Intent intent2 = getIntent();
String data2 = intent2.getStringExtra("AimData");
TextView show = (TextView)findViewById(R.id.show);
show.setText(data2);
}
}
  首先用getIntent()方法获取用于启动SecondActivity的Intent,然后调用getStringExtra()方法,传入相应的键(“AimData”),就可以得到相应的数据了。

点击按钮转到SecondActivity可以看到传入的数据如截图:
  以上是传递单一数据,如果传递不止一种数据那该怎么办呢?这时我们可以使用Bundle传递数据包。 MainActivity中的核心代码:
 public class MainActivity extends Activity {

     @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main); findViewById(R.id.SwitchSecondAty).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent1 = new Intent(MainActivity.this , SecondActivity.class);
Bundle bundle = new Bundle();
bundle.putString("name" , "KY2");
bundle.putInt("age" , 21);
intent1.putExtras(bundle);
startActivity(intent1);
}
});
}
}

  首先新建一个Bundle对象,之后再传递数据,最后将整个bundle放入intent当中。

SecondActivity中的核心代码:
 public class SecondActivity extends Activity {

     @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_second); //get data from Intent
Intent intent2 = getIntent();
Bundle data2 = intent2.getExtras();
TextView show = (TextView)findViewById(R.id.show);
show.setText(String.format("name = %s , age = %d" , data2.getString("name") , data2.getInt("age")));
}
}
首先通过Bundle data2 = intent2.getExtras();获取bundle。

结果截图:
(二).返回数据给上一个Activity 思路:1.通过Intent进行数据的传递,Intent作为数据的载体。
2.首先将要传递的数据放入到Intent当中。这里用到了Intent中的putExtra()方法。
3.启动另一个Activity后将数据从Intent中取出来。这里用到了getStringExtra()方法。

SecondActivity中的核心代码:
 public class SecondActivity extends Activity {

     EditText editText;

     @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_second);
editText = (EditText)findViewById(R.id.write); findViewById(R.id.BackToMainAty).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent1 = new Intent();
intent1.putExtra("AimData", editText.getText().toString());
setResult(RESULT_OK, intent1);
//finish the SecondActivity
finish();
}
});
}
}

  首先需要定义一个返回按钮,之后需要一个输入文本框。构建一个Intent用于传递数据,将数据放入Intent中。向上一个Activity返回数据,则需要setResult()方法。此方法接收两个参数,第一个参数用于向上一个Activity返回处理结果,一般只使用RESULT_OK或者RESULT_CANCELED这两个值,第二个参数则是承载数据的Intent。最后用finish()方法销毁当前活动即SecondActivity。

MainActivity中的核心代码:
 public class MainActivity extends Activity {

     TextView textView;

     @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main); textView = (TextView)findViewById(R.id.display); findViewById(R.id.Switch).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this , SecondActivity.class);
startActivityForResult(intent , 0);
}
});
} @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
textView.setText("SecondActivity返回的数据是:" + data.getStringExtra("AimData"));
}
}

  想要接收所启动的Activity传回的数据的话,那么这里就不能用startActivity()了,要用startActivityForResult()。此方法接受了两个参数,第一个参数即用于启动Activity的Intent,第二个参数是请求码requestCode,我们可以通过请求码确定此次请求的意义是什么,请求码是唯一的就可以了,这里传入了0。之后再重写onActivityResult()方法用于呈现SecondActivity传递过来的数据。这里的Intent data就是SecondActivity中携带数据的Intent。

关于onActivityResult()方法:第一个参数是requestCode即启动活动时传入的请求码,第二个参数是resultCode即返回数据时传入的处理结果,第三个参数是data即携带着返回数据的Intent。一个活动可以启动很多个活动,这时接收这些活动的返回的数据都会回调到onActivityResult()方法当中,这时我们需要通过requestCode判断数据来源,确定是哪个Activity返回的之后再通过resultCode来判断处理结果是否成功,最后从data中取值。

结果截图:
点击按钮启动SecondActivity

输入数据点击按钮返回MainActivity
 
 版权声明:博主原创,转载请注明出处。
 

        

     

												

最新文章

  1. Spring在web应用中获得Bean的方法
  2. redis清空缓存
  3. Find和FirstOrDefault()有什么区别?
  4. Spring 计划
  5. CSS+HTML网页设计与布局(学习笔记1)
  6. GCC 编译使用动态链接库 LD
  7. js的原型链
  8. leetCode 48.Rotate Image (旋转图像) 解题思路和方法
  9. 【ASP.NET Web API教程】2.3.3 创建Admin控制器
  10. OAuth 2.0: Bearer Token Usage
  11. FFmpeg源代码简单分析:常见结构体的初始化和销毁(AVFormatContext,AVFrame等)
  12. The Triangle(DP-数塔问题)
  13. NFC读写电子便签总结
  14. WebService 的CXF框架 WS独立服务之HelloWorld
  15. [Failed to convert property value of type 'java.lang.String' to required type 'java.util.Date' for property 'beginTime';
  16. Debian 利用 iso 镜像完全离线更新 apt-cdrom
  17. 【Kettle】4、SQL SERVER到SQL SERVER数据转换抽取实例
  18. if 的一切
  19. 3个方法实现JavaScript判断移动端及pc端访问不同的网站
  20. 卸载oracle数据库

热门文章

  1. C# - CSV(Comma-Separated Values)文件读取.
  2. 用ThreadLocal管理事务
  3. c++中vector等容器的实现机制
  4. 腾讯的一道js面试题(原型)
  5. JQuery控制input的readonly和disabled属性
  6. Python新手学习基础之条件语句——if/else语句
  7. Activity被回收导致fragment的getActivity为null的解决办法
  8. ELK 下载地址elastic
  9. linux vmstat使用说明
  10. CH Round #53-数据备份