标签:
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
标签:
原文地址:http://www.cnblogs.com/kaiyanky2/p/4693530.html