当我们的Activity上弹出Dialog对话框时,程序的生命周期依然是onCreate() —> onStart() —> onResume(),在弹出Dialog的时候并没有onPause()和onStop...当我们在A中激活B时,A调用onPause()方法,此时B出现在屏幕时,B调用onCreate()、onStart()、onResume()。...如果一个Service被多次执行startService(),它的onCreate()方法只会调用一次,也就是说该Service只会创建一个实例,而它的onStartCommand()将会被调用多次(对应调用...采用Context.bindService()方法启动服务,在服务未被创建时,系统会先调用服务的 onCreate()方法,接着调用onBind()方法。...,我收到的指令是:"+getResultData()); } } 启动模式: 1、standard:标准化启动模式 每启动一个Activity,都会重新创建Activity
对于startActivity函数的调用很多文章都有介绍,可以简单参考下老罗的博客Android应用程序内部启动Activity过程(startActivity)的源代码分析,比如在Activity A...Activity跳转或者返回主界面时,onSaveInstanceState是一定会调用的,但是OnRestoreInstanceState却不会,它只有Activity或者App被异常杀死,走恢复流程的时候才会被调用...那么正常的创建为什么没调用呢?...下面结合具体的系统View控件来分析一下这两个函数的具体应用:比如ViewPager与FragmentTabHost,这两个空间是主界面最常用的控件,内部对后台杀死做了兼容,这也是为什么被杀死后,Viewpager...在恢复后,能自动定位到上次浏览的位置。
onPageScrolled(int position, float positionOffset, int positionOffsetPixels) :该方法在滑动过程中将一直被调用,该方法的参数说明如下...notifyDataSetChanged ():该方法由应用程序在适配器数据改变时主动调用。...setPrimaryItem (ViewGroup container, int position, Object object):调用该方法去通知当前适配器的哪一项被考虑为“primary”,它是当前展示给用户的页面...继续使用WidgetSample工程的advancedviewsample模块,在src/main/res/layout/目录下创建viewpager_layout.xml文件,在其中填充如下代码片段:...不知道你是否发现,这是不是就是我们常见的应用程序启动时的引导页,只是示例相对来说比较简单,没有页面指示引导,这一块后续学习再逐步来优化完成。
); } //创建Fragment时会回调,只调用一次 @Override public void onCreate(Bundle savedInstanceState){ super.onCreate...getActivity()的方法获取Activity的; Activity是通过调用FragmentManager的findFramentById()的,也可以用findFragmentByTag()方法获取...Fragment片段的。...>ViewPager> ViewPager是一种容器,可以盛装两种类型的对象:一种是View对象; 也可以放置Fragment。...scroll.setOnTouchListener(new OnTouchListener){ } 记得 scrollBy 和 scrollTo 的区别 Gallery 图片浏览器 Gallery
); } //创建Fragment时会回调,只调用一次 @Override public void onCreate(Bundle savedInstanceState){ super.onCreate...getActivity()的方法获取Activity的; Activity是通过调用FragmentManager的findFramentById()的,也可以用findFragmentByTag()方法获取...Fragment片段的。...android:...> ViewPager> ViewPager是一种容器,可以盛装两种类型的对象:一种是View对象; 也可以放置Fragment...scroll.setOnTouchListener(new OnTouchListener){ } 记得 scrollBy 和 scrollTo 的区别 Gallery 图片浏览器 Gallery
的程序框架对我来说是种信仰,公司里大概有15个程序是用的我写信仰架构!...另外要说一点的是ViewPager的缓存机制: ViewPager会缓存当前页,前一页,以及后一页,比如有1,2,3,4这四个页面: 当我们处于第一页:缓存1,2 ——> 处于第二页:缓存 1,2...这是为了确保 在finishUpdate(viewGroup)返回时视图能够被移除。...或其子类的实例 public void setOnCheckedChangeListener (RadioGroup.OnCheckedChangeListener listener)注册一个当该单选按钮组中的单选按钮勾选状态发生改变时所要调用的回调函数...listener)注册一个当子内容添加到该视图或者从该视图中移除时所要调用的回调函数 listener 当层次结构发生改变时所要调用的回调函数 ---- 三.使用效果 ?
例如,当 Activity 暂停时,Activity 的所有片段也会暂停;当 Activity 被销毁时,所有片段也会被销毁。...通常,至少应实现以下生命周期方法: onCreate() 系统会在创建片段时调用此方法。当片段经历暂停或停止状态继而恢复后,如果希望保留此片段的基本组件,则应在实现中将其初始化。...生命周期变化 Fragment被创建的时候 它会经历以下状态 onAttach() onCreate() onCreateView() onActivityCreated() Fragment 对用户可见的时候...Fragment,然后当我们点击 back 按钮的时候会自动帮我们实现退栈操作。...onCreate:在最初创建Fragment的时候会调用,和Activity的onCreate类似。
懒加载 懒加载意思也就是当需要的时候才会去加载 那么,为什么Fragment需要懒加载呢,一般我们都会在onCreate()或者onCreateView()里去启动一些数据加载操作,比如从本地加载或者从服务器加载...Fragment时还会再调用一次。...从 “可见 -> 不可见” 时进行一些操作的话,比如取消加载控件显示 这边再提一下,setUserVisibleHint()可能会在Fragment的生命周期之外被调用,也就是可能在view创建前就被调用...,也可能在destroyView后被调用,所以如果涉及到一些控件的操作的话,可能会报 null 异常,因为控件还没初始化,或者已经摧毁了。...因为ViewPager里对Fragment的回收和创建时,如果Fragment已经创建过了,那么只会调用 onCreateView() -> onDestroyView() 生命函数,onCreate(
我写博客的题材很多时候取决于平时大家问的问题,最近一段时间有不少朋友都问到ViewPager是怎么实现的。...那ViewPager相信每个人都再熟悉不过了,因此它实在是太常用了,我们可以借助ViewPager来轻松完成页面之间的滑动切换效果,但是如果问到它是如何实现的话,我感觉大部分人还是比较陌生的, 为此我也是做了一番功课...那有的朋友可能会问了,为什么都是调用的LinearLayout中的scroll方法?...可以看到,当我们点击scrollTo按钮时,两个按钮会一起向右下方滚动,因为我们传入的参数是-60和-100,因此向右下方移动是正确的。...在整个后续的平滑滚动过程中,computeScroll()方法是会一直被调用的,因此我们需要不断调用Scroller的computeScrollOffset()方法来进行判断滚动操作是否已经完成了,如果还没完成的话
本文提到的导航都是根据 Android 4.0 设计规范中推荐的 ActionBar 实现的, 因此整个应用程序启用带 ActionBar 的主题, 如果使用 Java 的话, 需要手工编辑 AppManifest.xml.../// ViewPager _viewPager; protected override void OnCreate(Bundle bundle) { base.OnCreate..._navSectionsPagerAdapter; // 当 ViewPager 的选中页切换时, 同步 actionBar 的选中项。 this....按钮显示为向上, 提示用户点击这个按钮可以返回应用程序的上一级。...if (item.ItemId == Android.Resource.Id.Home) { // 当 Home 按钮被点击时会调用到这里 // 创建启动上级 Activity 的 Intent
设计Fragment的目的是让页面布局更加灵活,不但可以随意组装和拼接各个片段,还可以只更新某个片段实现页面局部更新的功能(这个类似网页的ajax技术)。...对象构造而来,每个元素返回的又是已初始化的Fragment对象;最后对ViewPager设置该适配器,从而把ViewPager与多个Fragment页面关联起来。...: 关联Fragment与Activity,在onCreate之前调用。...onCreateView : 创建Fragment的视图,在onCreate之后调用。...onActivityCreated : 在Activity页面创建完毕之后调用,这意味着onCreateView有可能在主页面尚未创建完毕时就完成了,比如说在主页面的onCreate方法中加入Fragment
注:为什么临时插入这一章,因为有读者在上一篇文章中评论了,我觉得大有道理,感谢 ?...} @Override public void onTabReselected(TabLayout.Tab tab) {//当标签被重新选择时回调...,另外还有一些不是必须,但是可能会用到的 /** * 当ViewPager的内容有所变化时,进行调用。...当我们传入的limit时,limit还是被设置为1,当limit与成员变量mOffscreenPageLimit的值不同时(成员变量mOffscreenPageLimit的默认值为1),更新成员变量...假如说我采用下面的方法调用setOffscreenPageLimit(2),此时ViewPager的简单示意图 ? 注:从上面的代码也可以看出ViewPager最少会预加载一个页面。
最后,在活动被销毁之前,系统会调用onDestroy()函数,用于释放活动所占用的资源。活动销毁后它的整个生命周期也就结束了。...在控件对齐时要注意控件的排列方向,比如:当LinearLayout 的排列方向是 horizontal 时,只有垂直方向上的对齐方式才会生效,因为此时水平方向上的长度是不固定的,每添加一个控件,水平方向上的长度都会改变...viewPager; } SlidingActivity的onCreate函数中调用initTabViews函数,通过它来初始化标签页面。...;然后,在循环中,通过图片编号获取每一帧图像,接着调用AnimationDrawable的addFrame函数,将每一张图片作为一帧加入该对象,调用setOneShot函数,参数表示动画是否执行一次,true...事件处理接口对象也称为监听器,通过覆盖接口的回调方法实现对事件的捕捉和处理;View 类的事件监听器是一个接口,该接口中的回调方法会在 View 的事件监听器被触发时由 Android 系统调用。
虚拟设备的兼容性一文 为了适应多屏幕尺寸和密度指定了最小应用内存需求。应用程序需要优化去处理最小的内存限制。然而,要记住很多设备被设置成更高的限制。...这节课将引导你,当加载多个图像时,使用一个内存和磁盘图像缓存来提高UI的响应性和流畅性。 使用一个内存缓存 一个内存缓存提供了快速访问位图的方式,更好的占用珍贵的应用程序内存。...下面的代码片段提供了一个 调用 recycle(). 的演示。...return BitmapFactory.decodeFile(filename, options); } 下面的代码片段展示了 上面代码中调用的addInBitmapOptions()方法,它看起来...很多图像需要一次性被加载到屏幕上,当上下滚动时很多图像还需要准备好被显示。
记得关于照片墙的文章我已经写过好几篇了,有最基本的照片墙,有瀑布流模式的照片墙,后来又在瀑布流的基础之上加入了查看大图和多点触控缩放的功能。...ViewPager的基本用法我就不在本文中介绍了,如果还不了解的朋友可以到王鹏兄那里先学习一下 http://blog.csdn.net/wangjinyu501/article/details/8169924...接下来通过findViewById()方法获取到ViewPager和TextView控件的实例,并创建了一个ViewPagerAdapter对象作为ViewPager的适配器,之后去调用setCurrentItem...另外,这里的ViewPager还注册了OnPageChangeListener接口,每当ViewPager的页数发现改变时,onPageSelected()方法就会调用。...return true; } ...... } 这里使用getParent()获取到的就是ViewPager对象,然后调用requestDisallowInterceptTouchEvent()
大家好,又见面了,我是你们的朋友全栈君。...这里就不放Log图给大家看,直接告诉大家,FragmentPagerAdapter在销毁Fragment时不会调用onDestroy()方法,而带了State的Adapter则会调用Fragment的onDestroy...如果这么简单地调用函数就能实现懒加载的话,那也没什么好说的,但是这里又有一个巨坑,则是因为这个setUserVisibleHint函数是游离在Fragment生命周期之外的,它的执行有可能早于onCreate...这又要提到之前Adapter的差异,onDestroy并不一定会调用,读者可以思考思考为什么。...其实ViewPager+Fragment的方式,ViewPager中显示的就是Fragment中所创建的View,Fragment只是一个控制器,并不会直接显示于ViewPager之中,这一点容易被忽略
adapter = viewPager.getAdapter(); if (adapter !...先关联,在设置 2.tabLayout切换时文字颜色当未选中时没有恢复 tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener...当我们先点击Tab1,再点击Tab2的时候(仅计算Tab2的步骤)。会先调用onTabUnselected,然后调用onTabSelected。...基于这样的调用,我们可以在onTabUnselected里面先恢复到默认的颜色,然后再在onTabSelected设置点击的颜色 最后附上我的代码 public class MainActivity extends...= {R.drawable.custom_p, R.drawable.stock_p, R.drawable.order_p}; @Override protected void onCreate
通常一个Android应用需要N个Activity组成,Activity主要负责与用户交互 在一个Activity生命周期中有以下方法会被系统回调: onCreate():在创建Activity时被回调...时被回调,总是在onStart()以后执行 onPause():暂停Activity时被回调 onResume():当Activity由暂停状态恢复为活动状态时。...(2)当我们按BACK键时,我们这个应用程序将结束,看一下LogCat ? ? 正好对应: ?...(3)当我们打开应用程序时,比如浏览器,我正在浏览NBA新闻,看到一半时,突然想听歌,这时候会按HOME键,然后去打开音乐应用程序。当我们按HOME的时候,看一下LogCat ? ? 正好对应: ?...(4)当我们再次启动ActivityDemo应用程序时,看一下LogCat ? 正好对应: ?
() |--- 界面已经可见 onAttachFragment() |--- 有子Fragment被添加时回调 onResume() |--- 界面已经可交互 onPause()...Fragment -卍卍卍卍卍卍卍- onDetach: 2019-04-26 18:12:25.868: LifeCycleActivity--onDestroy: ---- 5.Fragment被替换时的生命周期...这是曾经让我疑惑的一点:构造函数入参来传参不是挺好的吗?但是: 貌似AS 不给我们用构造,需要通过Fragment#setArguments(Bundle)来传参 ? 如果我任性,偏要用呢?...----虽然画红线但是还是运行还是能跑起来的,效果也没有差别, 于是乎,问题来了: 为什么谷歌的大佬不推荐我们在Fragment中使用构造函数呢?...的生命周期回调 打开时 isVisibleToUser 出现了,而且是最先调用的,一开始是红色 isVisibleToUser= true 总的来说就是生成了红色和黄色两个Fragment并对两者其进行了初始化
大家好,又见面了,我是全栈君 边界的时候会看到一个不能翻页的动画,可能影响用户体验。...:这个值直接关系到ViewPager的“边界”,因此当我们把它设置为Integer.MAX_VALUE之后,用户基本就看不到这个边界了(估计滑到这里的时候电池已经挂了吧o_O)。...实际上,实验表明这里如果加上了remove的调用,则会出现ViewPager的内容为空的情况。...轮播效果的实现:使用Handler进行更新这里我定义了一个Handler来处理ViewPager的轮播。所谓的“轮播”效果实现起来是这样的:每隔一定时间(这里是3秒)切换一次显示的页面。...为此,我们可以使用Handler的sendEmptyMessageDelayed()方法来实现定时更新,并注意用户也可能会对带有轮播效果的ViewPager手动进行滑动操作,因此我认为用户这时候是希望查看指定页面的
领取专属 10元无门槛券
手把手带您无忧上云