1.打开新的Activity:
startActivity(new Intent(MainActivity.this, NewActivity.class));
2.打开新的Activity,并传递若干个参数给它:
Intent intent = new Intent(MainActivity.this, NewActivity.class)
Bundle bundle = new Bundle();//该类用作携带数据
bundle.putString(“name”, “小岩岩”);
bundle.putInt(“age”, 4);
startActivity(intent);
在另一个Activity里面接收参数:
Bundle bundle = this. getIntent(). getExtras();
String name = bundle. getString(“name”);
int age = bundle. getInt(“age”)
Bundle类用作携带数据,它类似于Map,用于存放key-value名值对形式的值。相对于Map,它提供了各种常用类型的putXxx()/ getXxx_r()方法,如:putString()/ getString_r()和putInt()/ getInt_r(),putXxx()用于往Bundle对象放入数据, getXxx_r()方法用于从Bundle对象里获取数据。Bundle的内部实际上是使用了HashMap类型的变量来存放putXxx()方法放入的值
3.Activity跳转,返回数据/结果
在一个主界面(主Activity)上能连接往许多不同子功能模块(子Activity上去),当子模块的事情做完之后就回到主界面,或许还同时返回一些子模块完成的数据交给主Activity处理。这样的数据交流就要用到回调函数onActivityResult。
<1>startActivityForResult(Intent intent, int requestCode);
第一个参数:一个Intent对象
第二个参数:如果> = 0,当Activity结束时requestCode将归还在onActivityResult()中。以便确定返回的数据是从哪个Activity中返回
<2>onActivityResult(int requestCode, int resultCode, Intent data)
第一个参数:这个整数requestCode提供给onActivityResult,是以便确认返回的数据是从哪个Activity返回的。
这个requestCode和startActivityForResult中的requestCode相对应。
第二个参数:这整数resultCode是由子Activity通过其setResult()方法返回。
第三个参数:一个Intent对象,带有返回的数据。
<3>setResult(int resultCode, Intent data)
调用这个方法把Activity想要返回的数据返回到父Activity
第一个参数:当Activity结束时resultCode将归还在onActivityResult()中,一般为RESULT_CANCELED , RESULT_OK。
第二个参数:一个Intent对象,返回给父Activity的数据。
* 注意,在setResult后,要调用finish()销毁当前的Activity,否则无法返回到原来的 Activity,就无法执行原来Activity的onActivityResult函数,看到当前的Activity没反应。*
RESULT_OK和RESULT_CANCELED是系统空间里面的常量,不需要自定义,直接使用就行。 另外在运行过程中,发现按Back键后,是可以返回RESULT_CANCELED的,看了SDK doc后,原来真的是那样,而且不带有数据的。这意味着,如果你设想在返回 RESULT_CANCELED时并返回数据,那么需要截获Back键的事件处理,把原来返回RESULT_CANCELED的核心逻辑copy到事件处理里面。这里给个例子:
((Button) findViewById(R.id.cancel)).setOnClickListener( new Button.OnClickListener() {
public void onClick(View v) {
// 实例化 Bundle,设置需要传递的参数
Bundle bundle = new Bundle();
bundle.putString(“phoneNO”, “020-123”); SendSMSActivity.this.setResult(RESULT_CANCELED, SendSMSActivity.this.getIntent().putExtras(bundle));
SendSMSActivity.this.finish(); } });
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// 是否触发按键为back键
if (keyCode == KeyEvent.KEYCODE_BACK) {
// 实例化 Bundle,设置需要传递的参数
Bundle bundle = new Bundle();
bundle.putString(“phoneNO”, “020-123”);
4.从fragment跳到另一个activity
从fragment中跳转和从activity中跳转类似,只不过你要先通过fragment的getActivity方法获取到显示这个fragment的activity,具体代码是这样的:
Intent intent = new Intent();
intent.setActivity(getActivity(), TargetActivity.class);
startActivity(intent); //这里用getActivity().startActivity(intent);
如果不返回结果的话,第三行代码没什么区别,如果要返回一个结果的话,可以有类似的两种方法:
//直接从fragment中跳转
startActivityForResult(intent, REQUEST_CODE);
这种写法接收返回的结果要在fragment中重写onActivityResult()方法;
//从activity中跳转
getActivity().startActivityForResult(intent, REQUEST_CODE);
这种写法要在Activity中重写onActivityResult()方法。