关于页面带值跳转,获取不到所传递的值

来源:互联网 发布:mac os 关闭当前窗口 编辑:程序博客网 时间:2024/05/17 23:35

  对于普通的页面携值跳转,这是一个很常见的问题,也有很多不同的方式,根据个人喜好所选择的也不尽相同。常见的方式有,1:将参数放入Intent之中,这是我最常使用的一种,简单方便,可以携带任何值,需要注意的一点是,如果你需要传递的不是基本数据类型,所传的值需要实现序列化接口(Serializable)。2:如果你的App中存在这样的变量,使用范围很广,占用的内存很小,可以考虑使用静态常量,这样就不用麻烦的去传递或者说去存取,在一个App还是不要使用太多的静态常量,因为静态常量会一直占用着你的内存直到退出App。3:在页面与Fragment之间传值,通常使用的setArguments这个方法,这是最方便的一种。4:广播的使用,广播可以用于任何场景的传递,但是需要注意的是广播的注册方式分为两类,一类是动态注册,一类是静态注册,动态注册在界面里注册通常在onCreate方法中注册,静态注册是在Mainefest中,动态注册需要注意的地方是,我们所接收广播的界面必须在发送广播之前创建,并且没有被销毁掉。5:回调,这种方式对于新手是最难理解的,当时我接触的时候,看了好多博文,都没能明白,在花了好多时间后,最后还是慢慢明白了回调的用法,关于回调,用起来的确很好用很方便。

对于我个人而言,优先级为Intent、setArguments>回调>广播;对于静态这个需要适合的情况才使用。

那么最后来说说关于今天的问题,在我们使用Intent传值确在接受界面接受不到所传递的值,这种情况和Activity的启动模式有关,当一个Activity为单一栈的时候,

<activity android:name="kelai.yisan.com.kelaiAr.activity.HomeActivity" android:launchMode="singleTask"/>

其所走的生命周期也发生了相应的变化,在我们再次进入这个Activity时候,会走这个方法

@Overrideprotected void onNewIntent(Intent intent) {    super.onNewIntent(intent);    setIntent(intent);}
而这个方法会重新替换一个新的Intent对象,这个时候我们使用getIntent这个方法,可以获取到Intent对象,却怎么也获取不到我们所传递的值,所以需要重写一下这个方法,就像上面一样。这个时候你在reStart方法之中才能获取到你所传递的对象值。

阅读全文
0 0
原创粉丝点击