Android编程实现两个Activity相互切换而不使用onCreate()的方法
本文实例讲述了android编程实现两个activity相互切换而不使用oncreate()的方法。分享给大家供大家参考,具体如下:
这里要实现的目的是:
有3个activity: a,b,c,从a中可以进入b,b中可以进入c,并且b和c之间可能需要多次相互切换,因此不能使用普通的startactivity-finish方式,因为重新创建activity比较耗时。当这个activity内容比较多时,重复创建很大的影响了流畅性。(即实现类似于qq上 选择照片页面-选择相册页面,这两个页面可能多次相互切换,所以不能多次创建)
1.从b进入c或者从c进入b时,均使用startactivity的方式(不使用finish),并为intent添加参数flag_activity_reorder_to_front,即:
intent intent = new intent(b.this, c.class); intent.addflags(intent.flag_activity__to_front); startactivity(intent);
在这种情况下,如果c之前没有创建则会被创建,如果已经创建了,则只会把c从aciticy栈中搬到b的上面来,而不再重新创建。
2.在c中重写onnewintent方法,即:
@override protected void onnewintent(intent intent) { super.onnewintent(intent); }
该方法中的参数intent即为从b到c时startactivity的intent,在第二次进入c时,可以在此方法中根据从b中传过来的数据更新c的页面。(第一次进入c时走oncreate,不会走onnewintent)
3.在b中也重写onnewintent,和上述2相同。
4.在a和b中使用某个按钮或返回键回到最开始的页面a时,同样使用startactivity的方式,并为intent添加参数flag_activity_clear_top,这样b和c都会被关闭(finish)
intent intent = new intent(this, a.class); intent.addflags(intent.flag_activity_clear_top); startactivity(intent);
5.同样,在a中重写onnewintent方法,处理b或c返回时传递的信息。并且,在manifest中为a添加属性
android:launchmode="singletop"
6.最后一个问题,由于从b到c和从c到b都使用的是startactivity的方式,因此activity之间切换的动画都是 开启新activity 的样式。例如,无论从b到c或者从c到b,新页面都是从右侧进入,给人的感觉似乎一直在创建新activity,很不友好。
解决这个问题的方法是自定义activity之间切换的动画,目的是给用户一种感觉:从c到b的时候是新开activity(b从右侧进入),而从b到c的时候是“返回”(c从左侧进入)。只需一行代码:
overridependingtransition(in, out);
in:进入的activity的动画; out:退出的activity的动画。
这里需要注意:
(1)对于普通的startactivity-finish方式,如果需要自定义activity之间切换的动画,只需将上述代码写在startactivity或finish之后即可:
(2)但是,本文中由于使用了flag_activity_reorder_to_front的方式,上述动画将只在第一次创建页面b或c的时候有效。解决方法是,将上述代码写在onnewintent中。例如从b到c,则在c中onnewintent中写上这行代码,指定c进入的样式和b退出的样式。
7.动画资源:
(1)activity从左侧退出:
<?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="150" android:fromxdelta="0" android:toxdelta="-100%p" android:fromydelta="0" android:toydelta="0" > </translate>
(2)activity从右侧退出:
<?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="150" android:fromxdelta="0" android:fromydelta="0" android:toxdelta="100%p" android:toydelta="0" > </translate>
(3)activity从左侧进入:
<?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="150" android:fromxdelta="-100%p" android:fromydelta="0" android:toxdelta="0" android:toydelta="0" > </translate>
(4)activity从右侧进入:
<?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="150" android:fromxdelta="100%p" android:toxdelta="0" android:fromydelta="0" android:toydelta="0" > </translate>
更多关于android相关内容感兴趣的读者可查看本站专题:《android开发入门与进阶教程》、《android调试技巧与常见问题解决方法汇总》、《android多媒体操作技巧汇总(音频,视频,录音等)》、《android基本组件用法总结》、《android视图view技巧总结》、《android布局layout技巧总结》及《android控件用法总结》
希望本文所述对大家android程序设计有所帮助。