全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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程序设计有所帮助。


# Android  # 两个  # Activity  # 切换  # 不使用  # onCreate()  # Android onCreateOptionsMenu的使用方法总结  # Android OnCreate()中获取控件高度与宽度两种方法详解  # Android使用onCreateOptionsMenu()创建菜单Menu的方法详解  # Android onCreate( )方法详细介绍  # Android 解决嵌套Fragment无法接收onCreateOptionsMenu事件的问题  # Android在OnCreate中获取控件的宽度和高度的实现代码  # Android中oncreate中获得控件高度或宽度的实现方法  # 重写  # 只需  # 而不  # 自定义  # 并为  # 写在  # 解决方法  # 的是  # 都是  # 进阶  # 相关内容  # 在此  # 目的是  # 是从  # 感兴趣  # 这两个  # 给人  # 给大家  # 新开  # 只在 


相关文章: 如何快速生成可下载的建站源码工具?  网站设计制作企业有哪些,抖音官网主页怎么设置?  建站之星Pro快速搭建教程:模板选择与功能配置指南  已有域名建站全流程解析:网站搭建步骤与建站工具选择  网站制作公司排行榜,抖音怎样做个人官方网站  大学网站设计制作软件有哪些,如何将网站制作成自己app?  网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思?  清除minerd进程的简单方法  北京企业网站设计制作公司,北京铁路集团官方网站?  C++时间戳转换成日期时间的步骤和示例代码  武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?  建站主机选购指南与交易推荐:核心配置解析  江苏网站制作公司有哪些,江苏书法考级官方网站?  建站之星如何实现PC+手机+微信网站五合一建站?  零基础网站服务器架设实战:轻量应用与域名解析配置指南  建站之星2.7模板快速切换与批量管理功能操作指南  如何在云指建站中生成FTP站点?  如何快速建站并高效导出源代码?  如何在宝塔面板中创建新站点?  娃派WAP自助建站:免费模板+移动优化,快速打造专业网站  企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?  微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?  网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?  如何续费美橙建站之星域名及服务?  建站之星手机一键生成:多端自适应+小程序开发快速建站指南  打鱼网站制作软件,波克捕鱼官方号怎么注册?  如何快速搭建高效服务器建站系统?  孙琪峥织梦建站教程如何优化数据库安全?  网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  ,石家庄四十八中学官网?  高防服务器:AI智能防御DDoS攻击与数据安全保障  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  开封网站制作公司,网络用语开封是什么意思?  电商网站制作公司有哪些,1688网是什么意思?  如何选择可靠的免备案建站服务器?  家庭服务器如何搭建个人网站?  建站之星在线版空间:自助建站+智能模板一键生成方案  建站168自助建站系统:快速模板定制与SEO优化指南  如何在Tomcat中配置并部署网站项目?  官网自助建站平台指南:在线制作、快速建站与模板选择全解析  ppt在线制作免费网站推荐,有什么下载免费的ppt模板网站?  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  如何快速查询域名建站关键信息?  如何基于云服务器快速搭建个人网站?  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  定制建站模板如何实现SEO优化与智能系统配置?18字教程  如何在万网主机上快速搭建网站?  免费公司网站制作软件,如何申请免费主页空间做自己的网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。