Android编程实现两个Activity相互切换而不使用onCreate()的方法
发布时间 - 2026-01-10 22:48:47 点击率:次本文实例讲述了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程序设计有所帮助。
# Android
# 两个
# Activity
# 切换
# 不使用
# onCreate()
# Android onCreateOptionsMenu的使用方法总结
# Android OnCreate()中获取控件高度与宽度两种方法详解
# Android使用onCreateOptionsMenu()创建菜单Menu的方法详解
# Android onCreate( )方法详细介绍
# Android 解决嵌套Fragment无法接收onCreateOptionsMenu事件的问题
# Android在OnCreate中获取控件的宽度和高度的实现代码
# Android中oncreate中获得控件高度或宽度的实现方法
# 重写
# 只需
# 而不
# 自定义
# 并为
# 写在
# 解决方法
# 的是
# 都是
# 进阶
# 相关内容
# 在此
# 目的是
# 是从
# 感兴趣
# 这两个
# 给人
# 给大家
# 新开
# 只在
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
百度输入法ai组件怎么删除 百度输入法ai组件移除工具
html文件怎么打开证书错误_https协议的html打开提示不安全【指南】
英语简历制作免费网站推荐,如何将简历翻译成英文?
北京专业网站制作设计师招聘,北京白云观官方网站?
Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程
Python自然语言搜索引擎项目教程_倒排索引查询优化案例
DeepSeek是免费使用的吗 DeepSeek收费模式与Pro版本功能详解
大学网站设计制作软件有哪些,如何将网站制作成自己app?
利用vue写todolist单页应用
微信小程序 配置文件详细介绍
Python数据仓库与ETL构建实战_Airflow调度流程详解
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧
详解jQuery停止动画——stop()方法的使用
昵图网官方站入口 昵图网素材图库官网入口
Laravel请求验证怎么写_Laravel Validator自定义表单验证规则教程
如何基于云服务器快速搭建个人网站?
Android滚轮选择时间控件使用详解
js实现点击每个li节点,都弹出其文本值及修改
如何在不使用负向后查找的情况下匹配特定条件前的换行符
Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】
Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】
用v-html解决Vue.js渲染中html标签不被解析的问题
Laravel如何实现全文搜索功能?(Scout和Algolia示例)
公司网站制作需要多少钱,找人做公司网站需要多少钱?
Claude怎样写约束型提示词_Claude约束提示词写法【教程】
Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南
如何在万网自助建站中设置域名及备案?
Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】
Laravel PHP版本要求一览_Laravel各版本环境要求对照
,交易猫的商品怎么发布到网站上去?
深圳网站制作平台,深圳市做网站好的公司有哪些?
Laravel观察者模式如何使用_Laravel Model Observer配置
Windows10如何更改计算机工作组_Win10系统属性修改Workgroup
Laravel项目怎么部署到Linux_Laravel Nginx配置详解
Python并发异常传播_错误处理解析【教程】
如何破解联通资金短缺导致的基站建设难题?
Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知
Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】
如何快速查询网站的真实建站时间?
高端建站如何打造兼具美学与转化的品牌官网?
Java遍历集合的三种方式
如何在宝塔面板创建新站点?
用yum安装MySQLdb模块的步骤方法
深圳网站制作的公司有哪些,dido官方网站?
jQuery中的100个技巧汇总
高配服务器限时抢购:企业级配置与回收服务一站式优惠方案
Bootstrap CSS布局之列表
香港服务器网站推广:SEO优化与外贸独立站搭建策略
jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】
下一篇:不会php能学laravel吗
下一篇:不会php能学laravel吗

