fragment切换

Android Fragment 深度解析

倾然丶 夕夏残阳落幕 提交于 2019-12-20 11:38:24
有过一些面试经验的人基本都深有体会,每次面试一般都会问到Fragment的知识,所以,今天我就单独把Fragment拿出来与大家分享一下. 会涉及到Fragment如何产生,什么是Fragment,Fragment生命周期,如何静态和动态使用Fragment,Fragment回退栈,Fragment事务,以及Fragment的一些特殊用途,例如:没有布局的Fragment有何用处?Fragment如何与Activiy交互?Fragment如何创建对话框?Fragment如何与ActionBar集成等等... 1、Fragment的产生与介绍 Android运行在各种各样的设备中,有小屏幕的手机,超大屏的平板甚至电视。针对屏幕尺寸的差距,很多情况下,都是先针对手机开发一套app,然后拷贝一份,修改布局以适应什么超级大屏的。难道无法做到一个app可以同时适应手机和平板吗?答案是,当然有,那就是Fragment.Fragment出现的初衷就是为了解决这样的问题。 你可以把Fragment当成Activity一个界面的一部分,甚至Activity的界面由完全不同的Fragment组成,更帅气的是Fragment有自己的声明周期和接收、处理用户的事件,这样就不必要在一个Activity里面写一堆事件、控件的代码了。更为重要的是,你可以动态的添加、替换、移除某个Fragment。 2

fragment 切换判断界面是否可见 使用场景

生来就可爱ヽ(ⅴ<●) 提交于 2019-12-14 14:44:03
fragment大家经常应用到 声明周期依赖于宿主activity 1 第一种用法:切换fragment /** 使用replace方法 */ private void showMyFragment(Fragment fragment) { FragmentTransaction transaction = fragmentManager.beginTransaction(); transaction.replace(R.id.layout_fragment, fragment); transaction.commit(); } 这种方法如果切换的fragment进行请求网络等会消耗流量和性能 2 第二种用法:add hide show------onHiddenChange() 使用场景:add hide show进行fragment切换的时候 所以按照google老大哥的方式 添加使用add 隐藏使用hide 需要判断是否添加 如果添加直接show /** * 修改显示的内容 不会重新加载 * newFragmeent 下一个fragment * currentFrament 当前的fragment */ private void switchFragment(Fragment newFragmeent) { if (newFragmeent != currentFrament

从源码看commit和commitAllowingStateLoss方法区别

最后都变了- 提交于 2019-12-10 01:07:42
Fragment介绍 在很久以前,也就是我刚开始写Android时(大约在2012年的冬天……),那时候如果要实现像下面微信一样的Tab切换页面,需要继承TabActivity,然后使用TabHost,在TabHost中添加子Activity来实现 现在大家都知道,我们一般情况下会使用FragmentActivity加Fragment来实现,Fragment是Android 3.0新增的,另外我们的support v4包也提供能Fragment的支持,所以现在在所有版本的SDK中我们都可以使用Fragment。Fragment是Activity的一部分,其中一个很重要的需要大家掌握的就是关于Fragment的生命周期,当然这次我们不会讨论这个问题,不过提供一个图片供大家参考,图片来自 xxv/android-lifecycle 从使用开始 FragmentManager fm = getSupportFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); ft.hide(firstStepFragment); if (secondStepFragment==null){ ft.add(R.id.fl_content, secondStepFragment); }else { ft.show

Fragment响应OnActivityResult方法

回眸只為那壹抹淺笑 提交于 2019-12-09 10:23:21
一个Activity+N个Fragment的做法非常普遍,Activity的职责就是(应该只是)对Fragment进行管理(调用切换、响应回调等),不该包含Fragment里的任何功能。Activity里有startActivityForResult及OnActivityResult,这通常都在Activity里出现。如果需要在Fragment里启动另一个程序(比如启动相机)且需要返回结果,则需要使用 startActivityForResult来启动Activity并使用 OnActivityResult来接收返回结果,那么直接在Fragment里使用 startActivityForResult和 OnActivityResult。 来源: oschina 链接: https://my.oschina.net/u/116399/blog/618173

Fragment(碎片)

梦想与她 提交于 2019-12-06 16:56:11
Fragment表示“碎片”,它的设计理念是将Activity划分为不同的区块,各区块可以是某个控件,也可以是由Fragment实现显示的部分。 【基本特性】 1. 可以在布局中添加某个容器承载Fragment,具体的显示内容由Fragment实现 2. Fragment可以被附加到容器中,也可以被其它Fragment替换,也可以被从容器中移除,无论是哪种操作,对于Fragment的宿主Activity及该Activity中其它的部分不会产生影响 3. Fragment有独立的生命周期 【创建流程】 1. 自定义View,继承android.support.v4.app.Fragment 2. 重写onCreateView()方法,确定需要显示的内容的View对象,并作为该方法的返回值 【使用ViewPager+Fragment】 1. 将Activity类修改为继承自FragmentActivity 2. 自定义类,继承android.support.v4.app.FragmentPagerAdapter,并重写抽象方法 3. 在自定义的FragmentPagerAdapter中定义构造方法时,需要FragmentManager对象,可以通过调用getSupportFragmentManager()方法获取 4.

Android Fragment的特点

大憨熊 提交于 2019-12-06 06:53:34
Fragment的特点 1)使Activity分离成多个可重用的组件,每个都有它自己的生命周期和UI 2)可以轻松的创建动态灵活的UI设计,可以适应于不同的屏幕尺寸。从手机到平板 3)Fragment是一个独立的模块,紧紧的与Activity绑定在一起,可以运行中动态的移除、加入、交换等 4)Frg提供一个新的方式让你在不同的安卓设备上统一你的UI 5)解决Activity间的切换不流畅,轻量切换 6)替代TabActivity做导航,性能更好 7)做局部内容更方便 8)可以从startActivityForResult中接收到返回的结果,但View不可以 来源: https://www.cnblogs.com/Ayinger/p/11966929.html

点击导航栏切换页面的几种方式

只谈情不闲聊 提交于 2019-12-06 03:17:08
最近比较流行tablayout+viewpager+fragment的点击导航栏实现页面切换的效果,可以参考: http://blog.csdn.net/qq_33425116/article/details/52599818#t5 我在这里介绍的都是比较原始的切换做法。 RedioGroup+Fragement(推荐) 运行效果: 写布局文件: 示例RadioButton: <RadioButton android:id="@+id/rb_home" style="@style/tab_style" android:checked="true" android:drawableTop="@drawable/bar_home_bg" android:text="主页" /> 样式文件tab_style: <style name="tab_style"> <item name="android:layout_width">0dip</item> <item name="android:layout_height">wrap_content</item> <item name="android:layout_gravity">center_vertical</item> <item name="android:layout_weight">1</item> <item name=

ViewPager,PagerAdapter总结

筅森魡賤 提交于 2019-12-05 23:33:43
在一个 Android 应用中,我使用 FragmentPagerAdapter 来处理多 Fragment 页面的横向滑动。不过我碰到了一个问题,即当 Fragment 对应的数据集发生改变时,我希望能够通过调用 mAdapter.notifyDataSetChanged() 来触发 Fragment 页面使用新的数据调整或重新生成其内容,可是当我调用 notifyDataSetChanged() 后,发现什么都没发生。 搜索之后发现不止我一个人碰到这个问题,大家给出的解决办法五花八门,有些确实解决了问题,但是我总感觉问题没搞清楚。于是我决定搞明白这个问题到底是怎么回事,以及正确的用法到底如何。要搞明白这个问题,仅仅阅读文档并不足够,还需要阅读相关几个类的相关方法的实现,搞懂其设计意图。下面就是通过阅读源代码搞明白的内容。 【ViewPager】 ViewPager 如其名所述,是负责翻页的一个 View。准确说是一个 ViewGroup,包含多个 View 页,在手指横向滑动屏幕时,其负责对 View 进行切换。为了生成这些 View 页,需要提供一个 PagerAdapter 来进行和数据绑定以及生成最终的 View 页。 setAdapter() ViewPager 通过 setAdapter() 来建立与 PagerAdapter 的联系。这个联系是双向的,一方面

Android ViewPager 取消预加载

强颜欢笑 提交于 2019-12-05 18:22:36
Android 新引入的Fragment加入了Viewpager这样的一个组件。至于该控件的功能在这里就不说了。这篇文章主要解决fragment viewpager预加载的问题。 默认的viewpager是会预先加载下一个fragment的控件的,可以通过setOffscreenPageLimit(int limit) 来设置要提前加载的fragment。即是说当limit等于5 的时候,打开第一个fragment的时候就相当于同时打开了其他的4个fragment了。这样切换的时候将会非常流畅。 但是,当每个fragment都需要去联网加载网络数据或者做一些耗时的操作,而且有其他的fragment并不是必须的,用户不一定会打开。这样的话如果还 预加载的话将会浪费资源,用户体验也不好。虽然可以通过setOffscreenPageLimit(0)来设置不提前预加载,但这样的设置没有效果。通过研究ViewPager的 源码,可以设置该类默认的DEFAULT_OFFSCREEN_PAGES = 0,来预防预加载。 下面是我整理的android-support-v4.jar,兼容了所有新版本和旧版本。 http://pan.baidu.com/s/1dDCEAlF 来源: oschina 链接: https://my.oschina.net/u/1265116/blog/209685

7.Fragment

て烟熏妆下的殇ゞ 提交于 2019-12-05 12:33:32
概念 直译 碎片、片段 目的 解决不同屏幕分辩率的动态和灵活UI设计。 场景 fragments 在活动Activity中为不同的屏幕尺寸修改布局配置(小屏幕可能每次显示一个片段,而大屏幕则可以显示两个或更多) *********如微信主界面切换,使用四个fragment进行切换,开销更小,更流畅,主界面一个activity即可搞定********* 要求 Fragment必须被写成可重用的模块。 fragment有自己的layout,自己进行事件响应,拥有自己的生命周期和行为,所以你可以在多个activity中包含同一个Fragment的不同实例。 优点 Fragment可以使你能够将activity分离成多个可重用的组件,每个都有它自己的生命周期和UI。 Fragment可以轻松得创建动态灵活的UI设计,可以适应于不同的屏幕尺寸。从手机到平板电脑。 Fragment是一个独立的模块,紧紧地与activity绑定在一起。可以运行中动态地移除、加入、交换等。 Fragment提供一个新的方式让你在不同的安卓设备上统一你的UI。 Fragment 解决Activity间的切换不流畅,轻量切换。 Fragment 替代TabActivity做导航,性能更好。 Fragment 在4.2.版本中新增嵌套fragment使用方法,能够生成更好的界面效果。