【Android开发】启动Activity并传递信息

【为了方便起见,以下把被启动的Activity称为toActivity,把启动Activity的Activity称为fromActivity(有点绕口)】
启动Activity是通过这个方法(java术语:方法)实现的:

public void startActivity(Intent intent)

而指明是从哪个activity启动哪个activity则是这个intent的事情了。
一般传给toActivity的intent的构造函数长这样:

Intent(Context packageContext, Class<?> cls)

简单来说就是一个(我也不知道功能的)context和一个目标类。
一般这个packageContext会使用getActivity()来取得。
而cls则由目标类.class来得到。
所以最简单的启动方式是这样的:

startActivity(new Intent(getActivity(), toActivity.class));

然而经常会需要传递一些信息给toActivity,这个时候就要往intent里面放入一些附加信息。
这些extra信息是以键值对的形式存储的,即一个键对应一个值。键是String类型,值的话什么都可以。
在将extra信息放入intent的时候使用一个统一的方法:

intent.putExtra(KEY, value);

由于取出的时候不同的类型所用的方法不同,如果选择在FromActivity里面往intent中放入额外信息,由于放入的时候需要KEY,取出的时候也需要KEY,这就意味着要么在fromActivity里面编入toActivity的内容(比如KEY),这显然是不大合适的,所以一般会把生成intent的任务交给toActivity。
在toActivity里面加入如下代码:

private static final String KEY="com.companyname.appname.keyname";

public static Intent newIntent(Context packageContext, Value value)//这里指的是值的类型和值
{
    Intent intent = new Intent(packageContext, toActivity.class);
    intent.putExtra(KEY, value);
    return intent;
}

就可以直接在fromActivity里面调用这个静态方法以取得intent了。

toActivity得到intent之后,还需要把里面的额外信息拿出来才行,不然干嘛要放进去?
拿出来的时候的方法取决于放入的是值的类型。
如果是一个类:

//因为在intent中(应该)是以(Bundle中的)泛型储存的
//所以需要进行强制类型转换
//其他具体类型的就不需要转换了
Value value = (Value) getIntent().getSerializableExtra(KEY);

如果是int:getIntExtra(...)
如果是int数组:getIntArrayExtra(...)
符合这个格式的还有:byte, short, long, float, double, boolean, char, String
值得注意的是有一个特殊的方法:getIntegerExtra(...)
此外还有关于Parcelable的,此处不详述。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值