android Intent的startActivityForResult()方法
startActivityForResult()
之前学习了利用Intent跳转页面的同时传值,但有的时候需要从跳转到的页面返回所需要的值(如修改了用户信息,需要返回修改的信息),通俗的意思就是A.Activity跳转到B.Activity,在A.Activity中要自动获取到B.Activity返回的数据。
1.介绍几个主要的方法:
1 MainActivity.this.startActivityForResult(intent1, 1);
第一个参数intent1就不介绍了,第二个参数的值必须要大于等于0,你可以自己设定数值,该值是用来标记你要跳转并返回值的Activity。比如这里我设定的是以就是说明A.Activity跳转到B.Activity的标记为1,若A.Activity跳转到C.Activity
那就不能再设定为1了,可以写除了1意外的所有正整数。
2.onActivityResult(int requestCode, int resultCode, Intent data) 这个方法是返回主activity自动执行的
1 protected void onActivityResult(int requestCode, int resultCode, Intent data) { 2 super.onActivityResult(requestCode, resultCode, data); 3 switch (requestCode) { 4 case 1: 5 Toast.makeText(MainActivity.this, 6 "这是从第一个activity返回的数据---->>" + data.getStringExtra("text"), 7 Toast.LENGTH_LONG).show(); 8 9 break; 10 case 2: 11 Toast.makeText(MainActivity.this, 12 "这是从第二个activity返回的数据---->>" + data.getStringExtra("text"), 13 Toast.LENGTH_LONG).show(); 14 15 break; 16 17 } 18 19 }
这个方法就是用来处理从哪张Activity返回的,并处理返回来数据。
requestCode:就是之前在主界面的.startActivityForResult的第二个参数值,通过判断requestCode就可以知道是哪张页面返回回来的
resultCode: 根据它来判断返回页面所需要的不同操作
Intent : 就是从子页面返回回来的Intent
3.setResult(resultCode, data)
1 setResult(1, intent1)
这里的1就对应到onActivityResult()方法中的resultCode
intent1 对应onActivityResult()方法中的data, 也就是要返回主Activity所需要处理的Intent
4.主要的方法介绍完以后就介绍下源代码:
MainActivity:
1 public class MainActivity extends Activity implements OnClickListener { 2 3 private Button btn1; 4 private Button btn2; 5 6 @Override 7 protected void onCreate(Bundle savedInstanceState) { 8 super.onCreate(savedInstanceState); 9 setContentView(R.layout.activity_main); 10 btn1 = (Button) findViewById(R.id.btn1); 11 btn1.setOnClickListener(this); 12 btn2 = (Button) findViewById(R.id.btn2); 13 btn2.setOnClickListener(this); 14 } 15 16 @Override 17 public boolean onCreateOptionsMenu(Menu menu) { 18 getMenuInflater().inflate(R.menu.main, menu); 19 return true; 20 } 21 22 @Override 23 public void onClick(View v) { 24 switch (v.getId()) { 25 case R.id.btn1: 26 Intent intent1 = new Intent(); 27 intent1.setClass(MainActivity.this, OneActivity.class); 28 MainActivity.this.startActivityForResult(intent1, 1); 29 break; 30 case R.id.btn2: 31 Intent intent2 = new Intent(); 32 intent2.setClass(MainActivity.this, TwoActivity.class); 33 MainActivity.this.startActivityForResult(intent2, 2); 34 35 break; 36 37 } 38 39 } 40 41 @Override 42 protected void onActivityResult(int requestCode, int resultCode, Intent data) { 43 super.onActivityResult(requestCode, resultCode, data); 44 switch (requestCode) { 45 case 1: 46 Toast.makeText(MainActivity.this, 47 "这是从第一个activity返回的数据---->>" + data.getStringExtra("text"), 48 Toast.LENGTH_LONG).show(); 49 50 break; 51 case 2: 52 Toast.makeText(MainActivity.this, 53 "这是从第二个activity返回的数据---->>" + data.getStringExtra("text"), 54 Toast.LENGTH_LONG).show(); 55 56 break; 57 58 } 59 60 } 61 62 }
OneActivity:
1 public class OneActivity extends Activity { 2 3 private EditText edit; 4 private Button submit; 5 6 @Override 7 protected void onCreate(Bundle savedInstanceState) { 8 super.onCreate(savedInstanceState); 9 setContentView(R.layout.activity_one); 10 edit = (EditText) findViewById(R.id.editOne); 11 submit = (Button) findViewById(R.id.btnSubmitOne); 12 submit.setOnClickListener(new Button.OnClickListener() { 13 14 @Override 15 public void onClick(View v) { 16 17 Intent intent1 = new Intent(); 18 intent1.putExtra("text", edit.getText().toString().trim()); 19 OneActivity.this.setResult(1, intent1); 20 21 OneActivity.this.finish(); 22 } 23 }); 24 25 } 26 27 @Override 28 public boolean onCreateOptionsMenu(Menu menu) { 29 getMenuInflater().inflate(R.menu.one, menu); 30 return true; 31 } 32 33 }
TwoActivity:
1 private EditText edit; 2 private Button submit; 3 4 @Override 5 protected void onCreate(Bundle savedInstanceState) { 6 super.onCreate(savedInstanceState); 7 setContentView(R.layout.activity_two); 8 edit = (EditText) findViewById(R.id.editTwo); 9 submit = (Button) findViewById(R.id.btnSubmitTwo); 10 submit.setOnClickListener(new Button.OnClickListener() { 11 12 @Override 13 public void onClick(View v) { 14 Intent intent1 = new Intent(); 15 intent1.putExtra("text", edit.getText().toString().trim()); 16 TwoActivity.this.setResult(2, intent1); 17 TwoActivity.this.finish(); 18 } 19 }); 20 21 } 22 23 @Override 24 public boolean onCreateOptionsMenu(Menu menu) { 25 // Inflate the menu; this adds items to the action bar if it is present. 26 getMenuInflater().inflate(R.menu.two, menu); 27 return true; 28 } 29 30 }
对应的XML文件就不贴出来了,子页面就一个EditText 和 Button
源码下载:源码