码迷,mamicode.com
首页 > 移动开发 > 详细

Android学习之Activity之间的数据传递

时间:2015-08-01 06:22:00      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:

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

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

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

MainActivity中的核心代码:
 1 public class MainActivity extends Activity {
 2 
 3     @Override
 4     protected void onCreate(Bundle savedInstanceState) {
 5         super.onCreate(savedInstanceState);
 6         requestWindowFeature(Window.FEATURE_NO_TITLE);
 7         setContentView(R.layout.activity_main);
 8 
 9         findViewById(R.id.SwitchSecondAty).setOnClickListener(new View.OnClickListener() {
10             @Override
11             public void onClick(View v) {
12                 String data1  = "Data Transfer";
13                 Intent intent1 = new Intent(MainActivity.this , SecondActivity.class);
14                 //put data in the Intent
15                 intent1.putExtra("AimData" , data1);
16                 startActivity(intent1);
17             }
18         });
19     }
20 }
  putExtra()方法里面是一个键值对参数,第一个参数是键(“AimData”),用于后面SecondActivity中从Intent中取值,第二个参数是真正要传递的数据(data1)。

SecondActivity中的核心代码:

 1 public class SecondActivity extends Activity {
 2 
 3     @Override
 4     protected void onCreate(Bundle savedInstanceState) {
 5         super.onCreate(savedInstanceState);
 6         requestWindowFeature(Window.FEATURE_NO_TITLE);
 7         setContentView(R.layout.activity_second);
 8 
 9         //get data from Intent
10         Intent intent2 = getIntent();
11         String data2 = intent2.getStringExtra("AimData");
12         TextView show = (TextView)findViewById(R.id.show);
13         show.setText(data2);
14     }
15 }
  首先用getIntent()方法获取用于启动SecondActivity的Intent,然后调用getStringExtra()方法,传入相应的键(“AimData”),就可以得到相应的数据了。

点击按钮转到SecondActivity可以看到传入的数据如截图:
技术分享技术分享

  以上是传递单一数据,如果传递不止一种数据那该怎么办呢?这时我们可以使用Bundle传递数据包。

MainActivity中的核心代码:
 1 public class MainActivity extends Activity {
 2 
 3     @Override
 4     protected void onCreate(Bundle savedInstanceState) {
 5         super.onCreate(savedInstanceState);
 6         requestWindowFeature(Window.FEATURE_NO_TITLE);
 7         setContentView(R.layout.activity_main);
 8 
 9         findViewById(R.id.SwitchSecondAty).setOnClickListener(new View.OnClickListener() {
10             @Override
11             public void onClick(View v) {
12                 Intent intent1 = new Intent(MainActivity.this , SecondActivity.class);
13                 Bundle bundle = new Bundle();
14                 bundle.putString("name" , "KY2");
15                 bundle.putInt("age" , 21);
16                 intent1.putExtras(bundle);
17                 startActivity(intent1);
18             }
19         });
20     }
21 }

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

SecondActivity中的核心代码:
 1 public class SecondActivity extends Activity {
 2 
 3     @Override
 4     protected void onCreate(Bundle savedInstanceState) {
 5         super.onCreate(savedInstanceState);
 6         requestWindowFeature(Window.FEATURE_NO_TITLE);
 7         setContentView(R.layout.activity_second);
 8 
 9         //get data from Intent
10         Intent intent2 = getIntent();
11         Bundle data2 = intent2.getExtras();
12         TextView show = (TextView)findViewById(R.id.show);
13         show.setText(String.format("name = %s , age = %d" , data2.getString("name") , data2.getInt("age")));
14     }
15 }
首先通过Bundle data2 = intent2.getExtras();获取bundle。

结果截图:
技术分享技术分享

(二).返回数据给上一个Activity

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

SecondActivity中的核心代码:
 1 public class SecondActivity extends Activity {
 2 
 3     EditText editText;
 4 
 5     @Override
 6     protected void onCreate(Bundle savedInstanceState) {
 7         super.onCreate(savedInstanceState);
 8         requestWindowFeature(Window.FEATURE_NO_TITLE);
 9         setContentView(R.layout.activity_second);
10         editText = (EditText)findViewById(R.id.write);
11 
12         findViewById(R.id.BackToMainAty).setOnClickListener(new View.OnClickListener() {
13            @Override
14            public void onClick(View v) {
15                Intent intent1 = new Intent();
16                intent1.putExtra("AimData", editText.getText().toString());
17                setResult(RESULT_OK, intent1);
18                //finish the SecondActivity
19                finish();
20            }
21         });
22     }
23 }

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

MainActivity中的核心代码:
 1 public class MainActivity extends Activity {
 2 
 3     TextView textView;
 4 
 5     @Override
 6     protected void onCreate(Bundle savedInstanceState) {
 7         super.onCreate(savedInstanceState);
 8         requestWindowFeature(Window.FEATURE_NO_TITLE);
 9         setContentView(R.layout.activity_main);
10 
11         textView = (TextView)findViewById(R.id.display);
12 
13         findViewById(R.id.Switch).setOnClickListener(new View.OnClickListener() {
14             @Override
15             public void onClick(View v) {
16                 Intent intent = new Intent(MainActivity.this , SecondActivity.class);
17                 startActivityForResult(intent , 0);
18             }
19         });
20     }
21 
22     @Override
23     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
24         super.onActivityResult(requestCode, resultCode, data);
25         textView.setText("SecondActivity返回的数据是:" + data.getStringExtra("AimData"));
26     }
27 }

  想要接收所启动的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之间的数据传递

标签:

原文地址:http://www.cnblogs.com/kaiyanky2/p/4693530.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!