首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android入门教程 | Fragment 基础概念

可以将片段视为 Activity 模块化组成部分,它具有自己生命周期,能接收自己输入事件,并且可以在 Activity 运行时添加或移除片段(这有点像可以在不同 Activity 重复使用“子...onCreateView() 系统会在片段首次绘制其界面时调用此方法。如要为片段绘制界面,从此方法返回 View 必须是片段布局根视图。如果片段未提供界面,可以返回 null。...如要为片段提供布局,必须实现 onCreateView() 回调方法,Android 系统会在片段需要绘制其布局时调用该方法。此方法实现所返回 View 必须是片段布局根视图。...(在本例,此值为 false,因为系统已将扩展布局插入 container,而传递 true 值会在最终布局创建一个多余视图组。) 接下来,需将该片段添加到您 Activity 。...onCreateView并不是一定会被调用,当添加是没有界面的Fragment就不会调用,比如调用FragmentTransactionadd(Fragment fragment, String tag

3.5K40

【Android】再来一篇Fragment懒加载(加载一次哦)

后来发现,我在那篇博客里封装 Fragment 基类不足以满足大家懒加载需求,所以决定重新来封装一次,这次封装支持以下功能: 1.支持数据懒加载并且加载一次 2.提供 Fragment 可见与不可见时回调...即使我们在 setUserVisibleHint() 做了很多判断,实现了可见时加载并且只有第一次可见时才加载,可能还是会遇到其他问题。...,这样可能会出现重复创建 view 情况,导致界面上显示多个相同 Fragment * view 复用其实就是指保存第一次创建 view,后面再 onCreateView() 时直接返回第一次创建...Fragment时才会加载数据, * 这样就可以防止每次进入都重复加载数据 * 该方法会在 onFragmentVisibleChange() 之前调用,所以第一次打开时,可以用一个全局变量表示数据下载状态...如果出现切换回来或不相邻Tab切换时导致空白界面的问题,解决方法:在 onCreateView复用布局 + ViewPager 适配器复写 destroyItem() 方法去掉 super。

1.6K70
您找到你想要的搜索结果了吗?
是的
没有找到

Android - 懒加载

那么我们要做就是禁止ViewPager预加载或者提供一个在Fragemnt可见情况下,才去进行耗时操作方法,只要Fragmeng可见我们就执行该方法。...不可见"); }; } 我们Fragment只需要继承BaseLazyLoadFragment,然后对应调用首次可见方法,再次可见方法,不可见方法做相应操作就可以了。...,让子 Fragment 再次调用自己可见事件分发方法,这次我们让 isParentFragmentVsible() 返回 false ,可见状态将会正确分发了,有点类似于父类完成后,又调用方法刷新子类...回到我们代码里:父Fragment调用自身 disPatchFragment方法分发了不可见事件,又会再次调用 dispatchChildFragmentVisibleState ,导致子 Fragment...再次调用自己 disPatchFragment再次调用了一次 不可见事件onFragmentInVisible,故产生了两次。

1.2K20

Fragment初识

不过,在手机尺寸屏幕上,没有足以储存两个片段空间,因此Activity A 包括用于显示文章列表片段,当用户选择文章时,它会启动Activity B,其中包括用于阅读文章第二个片段。...⑤当我们按下键盘回退键,Fragment会再次显示出来: onCreateView -> onActivityCreated -> onStart -> onResume ⑥如果我们替换后,在事务commit...官方文档说创建Fragment时至少需要实现三个方法:onCreate( ),onCreateView( ),OnPause( ); 不过貌似写一个onCreateView也是可以… Fragment...至于使用哪个包看你需求了,现在3.0下手机市场份额其实已经不多了,随街都是4.0以上,7.0都出了,你说呢…所以这个时候,你可以直接使用app包下Fragment 然后调用相关方法,通常都是不会有什么问题...Step 1:定义Fragment布局 Step 2:自定义一个Fragment类,需要继承Fragment或者他子类,重写onCreateView()方法 在该方法调用:inflater.inflate

1.2K20

【Android】Fragment懒加载和ViewPager

懒加载 懒加载意思也就是当需要时候才会去加载 那么,为什么Fragment需要懒加载呢,一般我们都会在onCreate()或者onCreateView()里去启动一些数据加载操作,比如从本地加载或者从服务器加载...而MeiziDataFragment却先打出了false,然后才打出true,这是因为setUserVisibleHint()在Fragment实例化时会先调用一次,并且默认值是false,当选中当前显示...从 “可见 -> 不可见” 时进行一些操作的话,比如取消加载控件显示 这边再提一下,setUserVisibleHint()可能会在Fragment生命周期之外被调用,也就是可能在view创建前就被调用...因为ViewPager里对Fragment回收和创建时,如果Fragment已经创建过了,那么只会调用 onCreateView() -> onDestroyView() 生命函数,onCreate(...,等待onCreateView后才会回调该方法,其它情况回调时机跟 {@link #setUserVisibleHint(boolean)}一致 * 在该回调方法你可以做一些加载数据操作,甚至是控件操作

1.6K20

Android在多种设计下实现懒加载机制方法

首先 setUserVisibleHint(boolean isVisibleToUser) 方法是必须调用,即当 Fragment 由可见变为不可见和不可见变为可见时回调。...对于第一个 Fragment ,如果 setUserVisibleHint(boolean isVisibleToUser ) 方法在 onCreateView() 之前调用的话,如果懒加载方法在 setUserVisibleHint...(boolean isVisibleToUser ) 调用,那么该 Fragment 将只能在被主动切换一次之后才能加载数据,这肯定是不可能,因此,我们需要在view创建完成之后,也进行一次调用。...思来想去,在 onActivityCreated() 方法是最合适。我们在继承时候,在 onViewCreated() 方法中进行一些初始化就行了,这样不会引起冲突。...setUserVisibleHint() 是不会调用,而我们设置 isVisibleToUser=false 默认值一直不会变,那么 lazyInitData() 方法也就一直不会执行。

1.3K30

安卓-碎片使用入门

第四章-Android开发碎片 4.1 碎片是什么 碎片(Fragment)是一种可以嵌入在活动当中UI片段,它能让程序更加合理和充分地利用大屏幕空间,因而在平板上应用得非常广泛。...而使用support-v4库Fragment就不会出现这个问题,只要你保证使用是最新support-v4库就可以了。...可以说这样写代码好处是不会IDE是不会报错引用错误,坏处是和程序执行顺序正好相反,但是如果你深谙代码执行逻辑,首先就是在activity_main文件通过android:name来引用这个碎片类...掌握了如何在活动调用碎片里方法,那在碎片中又该怎样调用活动里方法呢?...图 4.8 启动程序时打印日志  可以看到,当RightFragment第一次被加载到屏幕上时,会依次执行onAttach() 、onCreate() 、onCreateView() 、onActivityCreated

1.3K20

Android基础:Fragment,看这篇就够了

虽然Fragment能在XML添加,但是这只是一个语法糖而已,Fragment并不是一个View,而是和Activity同一层次。 这里给出动态添加方式。...因此避免出现该异常方案有: 不要把Fragment事务放在异步线程回调,比如不要把Fragment事务放在AsyncTaskonPostExecute(),因此onPostExecute()可能会在...onDetach():当Fragment和Activity解除关联时调用。 上面的方法,只有onCreateView()在重写时不用写super方法,其他都需要。...上面这个代码功能就是将Fragment加入Activity,内部实现为:创建一个BackStackRecord对象,该对象记录了这个事务全部操作轨迹(这里做了一次add操作,并且加入回退栈),随后将该对象提交到...这里懒加载实现思路是:用户不可见界面,初始化UI,但是不会做任何数据加载。等滑到该页,才会异步做数据加载并更新UI。

4.8K122

Android开发:5分钟解析Activity&Fragment生命周期

onResume () 调用场景: 当MainActivity第一次启动时:onCreate()->onStart()->onResume ; “The activity comes to...onRestart方法,然后调用onStart方法,最后调用onResume方法,再次进入运行状态。...详细解读每个方法调用场景 onAttach方法 Fragment和Activity建立关联时候调用(获得activity传递值) onCreateView方法 为Fragment创建视图...(加载布局)时调用(给当前fragment绘制UI布局,可以使用线程更新UI) onActivityCreated方法 当ActivityonCreate方法执行完后调用(表示activity...执行oncreate方法完成了时候会调用此方法) onDestroyView方法 Fragment布局被移除时调用(表示fragment销毁相关联UI布局) onDetach方法 Fragment

1.3K30

Android开发笔记(一百三十九)可定制可滑动标签栏

那么对应到底部标签栏这里,便是要求标签页个数允许定制,并且每个页面除了可以通过标签页点击操作进行切换之外,也允许通过左右滑动来切换。...剩下FragmentActivity方式,在布局文件只需声明一个FragmentTabHost,然后在代码为该Host控件调用addTab方法逐个添加标签页,所以正好用来个性化定制标签页。...原配无论何时都不会调用setUserVisibleHint方法。...,这下不会闪退了。...平常用户点开某个标签页,该标签页setUserVisibleHint便被调用;可是第一次打开标签主页面时,默认显示第一个标签页,此时标签页生命周期为onAttach->setUserVisibleHint

1.6K20

Android开发笔记(一百零一)滑出式菜单

方法设置内容布局,调用setBehindContentView方法设置菜单布局,注意两个初始布局都是空; 4、从自己写Fragment类分别构造出实际内容布局和菜单布局,然后调用FragmentManager...Fragment类继承自ListFragment; 4、菜单Fragment类在onCreateView调用setListAdapter方法设置菜单项列表信息; 5、重写菜单Fragment类onListItemClick...表现在界面上,就是点击菜单布局后回到ViewPager页面,会看到ViewPager头两页变空白了,查看日志发现头两页不会执行onCreateView方法。...这就涉及到Fragment回收机制,onCreateView会在该页面第一次打开时调用,如果该页面还未被回收,自然就不会重新创建。...,自然也不会再次onCreateView了。

1.1K70

android之Fragment介绍

其行为与Activity很相似, 有自己对应布局(包含具体View), 它有自己生命周期,接收自己输入事件,并且可以从运行activity添加或移除。...Fragment生命周期 image.png onCreateView是创建时候调用,onViewCreated是在onCreateView后被触发事件,前后关系 就是fragmentonCreateView...且onStart运行时间位于onViewCreated之后 方法 含义 onAttach方法 Fragment和Activity建立关联时候调用(获得activity传递值) onCreateView...方法 为Fragment创建视图(加载布局)时调用(给当前fragment绘制UI布局,可以使用线程更新UI) onActivityCreated方法 当ActivityonCreate方法执行完后调用...(表示activity执行oncreate方法完成了时候会调用此方法) onDestroyView方法 Fragment布局被移除时调用(表示fragment销毁相关联UI布局) onDetach

77820

Android面试题总结【完整详细版本”一”】(含答案)

BIND_NOT_FOREGROUND:确保被绑定service永远不会有运行于前台优先级,因为默认情况下,绑定一个service会提高它优先级 BIND_ABOVE_CLIENT:确保客户端处于前台时...2、singleTop:栈顶复用模式 当前栈已经有该Activity实例,并且该实例位于栈顶时,会去调用onNewIntent()方法。...,当你再次访问前一个网络请求时,就可以直 接从代理服务器获取,而不需要请求我们web服务器】。...在session被创建之后,就可以调用session相关方法往session增加内容; 当客户端再次发送请求时候,会将这个session id带上,...【由于Handler是在主线程创建,因此我们handleMessage()方法代码也会在主线程执行,避免了异常 产生】 Handler消息机制

70020

DialogFragment 使用

AlertDialog和PopupWindow随屏幕切换而消失,并且如果处理不当很可能引发异常。 DialogFragment出现完美的解决了横竖屏幕切换Dialog消失问题。...方法 通过继承DialogFragment并且实现它onCreateView(LayoutInflater, ViewGroup, Bundle) 这个方法来加载一个我们指定xml布局从而提供对话框内容...DialogFragment宽高设置无效 DialogFragment在onCreate()和onCreateView()设置布局大小无效,因为onCreate()和onCreateView()生命周期在...= null) { window.setLayout(lp.width, lp.height); } } } DialogFragment消失操作 DialogFragment在正常Dismiss后并不会直接从当前移除...,那么在dismiss时需要手动调用dismissAllowingStateLoss()方法,并且再次show时不能用上一个DialogFragment实例。

1.6K10

并发多线程学习(三)Java多线程入门类和接口

我们在程序里面调用了start()方法后,虚拟机会先为我们创建一个线程,然后等到这个线程第一次得到时间片时再调用run()方法。 注意不可多次调用start()方法。...在第一次调用start()方法后,再次调用start()方法会抛出IllegalThreadStateException异常。...一般我们是不会使用它,那什么时候会使用到这个变量呢?...:可继承ThreadLocal,见片段4,Thread类里面有两个私有属性来支持ThreadLocal,我们会在后面的章节介绍ThreadLocal概念。...运行状态只会在set、setException、cancel方法终止。COMPLETING、INTERRUPTING是任务完成后瞬时状态。 以上就是Java多线程几个基本类和接口介绍。

28930

《Android基础:Fragment,看这篇就够了》

虽然Fragment能在XML添加,但是这只是一个语法糖而已,Fragment并不是一个View,而是和Activity同一层次。 这里给出动态添加方式。...因此避免出现该异常方案有: 不要把Fragment事务放在异步线程回调,比如不要把Fragment事务放在AsyncTaskonPostExecute(),因此onPostExecute()可能会在...()->onCreate()->onCreateView()->onActivityCreated()->onStart()都是在ActivityonStart()调用。...对象,该对象记录了这个事务全部操作轨迹(这里做了一次add操作,并且加入回退栈),随后将该对象提交到FragmentManager执行队列,等待执行。...这里懒加载实现思路是:用户不可见界面,初始化UI,但是不会做任何数据加载。等滑到该页,才会异步做数据加载并更新UI。

3.8K61
领券