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
 
 版权声明:博主原创,转载请注明出处。
 

        

     

												

Android学习之Activity之间的数据传递的更多相关文章

  1. Activity之间的数据传递-android学习之旅(四十七)

    activity之间的数据传递主要有两种,一种是直接发送数据,另一种接受新启动的activity返回的数据,本质是一样的 使用Bundle传递数据 Intent使用Bundle在activity之间传 ...

  2. activity之间的数据传递方法

    1  基于消息的通信机制 Intent--------boudle,extra 用这种简单的形式,一般而言传递一些简单的类型是比较容易的,如int.string等 详细介绍下Intent机制 Inte ...

  3. Activity之间的数据传递

    最常用的Activity之间的数据传递. btnStartAty1.setOnClickListener(new View.OnClickListener() { @Override public v ...

  4. Android Fragment与Activity之间的数据交换(Fragment从Activity获取数据)

    Fragment与Activity之间的数据交换,通常含有3: 一.Fragment从Activity获取数据(仅本文介绍了一个第一): 两.Activity从Fragment获取数据: 三.Frag ...

  5. Android学习总结——Activity之间传递参数

    核心内容:一.在 Activity 之间传递简单数据二.在 Activity 之间传递复杂数据 三.在 Activity 之间传递自定义值对象   软件环境:Android Studio   一.在 ...

  6. Android 数据传递(一) Activity之间的数据传递

    bundle Google Bundle类说明 Bundle类是一个key-value对.Activity之间的数据通信可以通过bundle类来实现数据的存储.即将数据放入bundle里面,将Bund ...

  7. Android中Activity之间的数据传递

    在开发中,我们经常涌用到Activity,那么既然用到了Activity,就一定免不了在两个或者多个Activity之间传递数据.这里我们先说一说原理,然后在看看代码和例子. 情况A:我们需要从Act ...

  8. Android笔记(四) Activity之间的数据传递

    我们之前使用Intent进行Activity之间的跳转,其实Intent还可以在启动活动的时候传递数据. Intent提供了一系列的putExtra方法以便我们把想要传递的数据暂存在Intent中,待 ...

  9. Android Activity之间的数据传递

    1.向目标Activity传递数据: Intent intent=new Intent(this,Main2Activity.class); //可传递多种类型的数据 intent.putExtra( ...

随机推荐

  1. windows身份验证,那么sqlserver的连接字符串的

    Data Source=计算机名称或ip地址;Initial Catalog=数据库名称;Integrated Security=True windows身份验证不需要psw的Provider=SQL ...

  2. x++ and ++x

    http://blog.sina.com.cn/s/blog_6c762bb30101ar1w.html 看到个东西,搞不清的时候可以看看 =.=

  3. C#list泛型集合

    //创建list泛型集合 List<int> ilist = new List<int>(); ilist.Add(); ilist.Add(); ilist.AddRange ...

  4. 动态绑定、阻止继承,final类和方法

    1.编译器查看对象的声明类型和方法名.当调用 x.f(param); 且隐式参数x生命为C类对象.这时候可能有多个名字都叫f,但是参数类型不一样的方法.编译器会一一列举C类中名为f的方法和其超类中访问 ...

  5. C++中的析构函数

    代码: #include <cstdio> #include <iostream> using namespace std; class A{ public: ~A(){ co ...

  6. xode 中文乱码处理

    find *.* -exec sh -c "iconv -f GB18030 -t UTF-8 {} > {}.txt" \;

  7. uva 260 - Il Gioco dell'X

    题解: 一定有人获胜,非黑即白:获胜条件为:black是由 上走到下,white是由 左走到右: #include <cstdio> using namespace std; int N; ...

  8. js 当前系统时间

    <script language=Javascript> function time(){ //获得显示时间的div t_div = document.getElementById('sh ...

  9. Hadoop学习历程(四、运行一个真正的MapReduce程序)

    上次的程序只是操作文件系统,本次运行一个真正的MapReduce程序. 运行的是官方提供的例子程序wordcount,这个例子类似其他程序的hello world. 1. 首先确认启动的正常:运行 s ...

  10. Python新手学习基础之条件语句——elif语句

    elif语句 (相当于C语言的else if) 在Python中,当我们需要有更多的判断条件时,我们往往会使用另外一种语法表达,即使用elif: if 判断条件1: 执行语句1 elif 判断条件2: ...