android-页面跳转及携带数据

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()方法。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值