false); initView(rootView); } isViewCreated=true;//在onCreateView执行完毕,将isViewCreated...initView(rootView); } isViewCreated=true;//在onCreateView执行完毕,将isViewCreated改为true;...= null && !...false); initView(rootView); } isViewCreated=true;//在onCreateView执行完毕,将isViewCreated...= null && !
方法返回结合后的View,根元素是第二个参数ViewGroup。如果是false的话,第一个参数所指定的layout文件会被填充并作为View返回。这个View的根元素就是layout文件的根元素。...当在Fragment的onCreateView()方法中填充并返回View时,要将attachToRoot设为false。...// 如果root是null,并且attachToRoot是false,那么返回的结果就是temp if (root == null || !...rInflateChildren方法解析所有子元素: 在LayoutInflater#inflate方法中,当解析完根视图以后,会通过rInflateChildren解析当前根视图下的所有子视图 final...View元素添加到他们对应的parent中,通过rInflate解析完成以后,整棵View结构树就构建完成了。
= null override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?...null * 需要添加 返回 [initTitleBar] 方法 */ protected abstract fun getTitleBar(): TitleBar?...这意味着我 们需要向函数传递⼀个 T 类型的实例,并且我们可以在函数内部调⽤该实例的成员。...{ return null } } interface BaseViewImp { /** 返回ViewModel的类*/ fun getModel()...{ return null } } 几个 kotlin 语法我啰嗦几句,var lateinit 只能说是提示编译器,这个变量不要因为没有初始化就给我报错,我会在使用前择期初始化
app会在不同屏幕尺寸时动态选择在同一个Activity中同时显示文章列表和对应选择的文章的详情信息,或者单独的一个列表界面,选择一个文章后打开新Activity来显示文章详情。...标签指定的Fragment在Activity的布局加载中会被实例化,onCreateView()返回的View将替换元素在layout中的位置。...而这个方法在Fragment还未attached或已经detached后 期间均返回null。...在通过FragmentTransaction来执行有关fragment的事务时,可以通过addToBackStack()来添加此次事务的操作到回退栈中,这样以后,用户按下返回键后Activity的Fragment...,布局中同时提供了R.id.detail_container作为ArticleDetailFragment的容器,这样在选择查看某个标题时, 就会在同一个界面使用ArticleDetailFragment
(),该方法返回Fragment的UI布局,需要注意的是inflate()的第三个参数是false,因为在Fragment内部实现中,会把该布局添加到container中,如果设为true,那么就会重复做两次添加...在一次事务中,可以做多个操作,比如同时做add().remove().replace()。 commit()操作是异步的,内部通过mManager.enqueueAction()加入处理队列。...上面的方法中,只有onCreateView()在重写时不用写super方法,其他都需要。...当用户点返回按钮回退事务时,F1会调onCreateView()->onStart()->onResume(),因此在Fragment事务中加不加addToBackStack()会影响Fragment的生命周期...如果要自定义对话框样式,只需要继承DialogFragment,并重写onCreateView(),该方法返回对话框UI。这里我们举个例子,实现进度条样式的圆角对话框。
onCreateView() 系统会在片段首次绘制其界面时调用此方法。如要为片段绘制界面,从此方法中返回的 View 必须是片段布局的根视图。如果片段未提供界面,可以返回 null。...如要为片段提供布局,必须实现 onCreateView() 回调方法,Android 系统会在片段需要绘制其布局时调用该方法。此方法的实现所返回的 View 必须是片段布局的根视图。...如要从 onCreateView() 返回布局,可以通过 XML 中定义的布局资源来扩展布局。为帮助您执行此操作,onCreateView() 提供了一个 LayoutInflater 对象。...但请注意,只有在该片段附加到 Activity 时才需调用 getContext()。如果尚未附加该片段,或者其在生命周期结束期间已分离,则 getContext() 返回 null。...界面时调用,返回值为Fragment要绘制布局的根视图,当然也可以返回null。
Fragment2 onPause Fragment2 onStop Fragment2 onDestoryView Fragment2 onDestory 用这种方法切换,Fragment在隐藏时并不会走...onDestoryView,所以显示时也不会走onCreateView,所有View都一直保存在内存中。...看了ApiDemo,发现也是用replace方法,但是,我少了一行: ft.addToBackStack(null); 在replace时加上这行,可以把原来的Fragment放入栈中,走onDestoryView...方法,但不会onDestory,返回时,直接onCreateView,不再onCreate....返回直接调用popBackStack()方法: getFragmentManager().popBackStack(); 转载地址:http://www.pocketdigi.com/20141006
= null) { view = mFactory2.onCreateView(parent, name, context, attrs); }...= null) { view = mPrivateFactory.onCreateView(parent, name, context, attrs);...总结 LayoutInflater有两个加载布局的方法,分别是两个参数和三个参数的,这里有以下几种情况: (1)、如果root为null,无论attachToRoot为true或者false,返回的都是一个不带...(2)、如果root不为null,attachToRoot为true,会返回一个带有LayoutParams的View,并且该View会添加到root布局。...(3)、如果root不为null,attachToRoot为false,也会返回一个带有LayoutParams的View,但不会添加到root布局。
在 Android Studio 中,点击最顶部的 Tools -> Kotlin ,然后选择 Show Kotlin Bytecode,可以在右侧面板中看到对应的字节码,然后点击 Decompile...具体查找流程是这样的:在findCachedViewById()中,会先通过缓存 HashMap 的 get 方法来获取控件, get() 中传入的 key 即控件 ID,由于第一次 get 的值为 null...以上是在 activity 里面直接使用控件 ID,但是在 fragment 里面使用要注意的是,不能在onCreateView方法里用 view 的 ID,而是在 onViewCreated以后使用,...()的,如果是在onCreateView方法里使用控件 ID,这个时候getView()会返回 null,即 var10000为null,这样findCachedViewById()就返回空了。...因此,千万要注意 fragment 里面不能在onCreateView方法里用 view 的 ID。
(String name, Context context, AttributeSet attrs) { View view = null; if (name.equals...= null) return view; return super.onCreateView(name, context, attrs); } } 我们可以发现,只是做了name...(自己理解静态内部类,一般内部类 就是和本来关系比较密切,在其他地方不需要调用,非静态内部类可以调用外部类的属性和方法, 比较方便。...Override这几个方法,而不从别的方法下手,自己以后再做考虑) 后面我们再说明下,是怎么通过AutoLayoutHelper把 传递值 和 计算 联系起来的 ---- AutoRelativeLayout...的接口, 传递 AutoLayoutHelper的实现 返回 AutoLayoutInfo 对象 ---- AutoLayoutInfo类 我们看看 AutoLayoutInfo 类 public
LayoutInflater的使用中重点关注inflate方法的参数含义: inflate(xmlId, null); 只创建temp的View,然后直接返回temp。...inflate(xmlId, null, false); 只创建temp的View,然后直接返回temp。...inflate(xmlId, null, true); 只创建temp的View,然后直接返回temp。...之后以后引入的,所以我们要根据SDK的版本去选择调用上述方法。...方法的时候调用的AppCompatDelegate.onCreateView的时候第一个参数传递的值就是null。
不能为 null,并且只能设置一次,设置之后无法修改,当 xml 中每一个元素名字被解析的时候调用。如果 factory 返回一个 View,将被添加到视图层级中。...如果返回 null,factory 的下一个默认方法 onCreateView(View, String, AttributeSet) 将被调用。...代理给 AppCompatDelegate 在 AppCompatDelegate 内部有一个 createView 方法,不要和 Factory 、Factory2 的 onCreateView 混淆...如果是未知类型的 View,将使用正确的 Context 调用 createView,默认返回 null,但一般会被 AppCompatViewInflater 的子类重写。...在检查 android:onClick 之后,view 就被返回了。
} } 可以看出来在 onCreateView 方法中会判断标签名字如果是 fragment 的话则会调用 mFragments.onCreateView 来创建 View。...= true; return onCreateView(inflater, container, savedInstanceState); } 在最后一行我们再次看到了 onCreateView...方法,这个 onCreateView 就是 Fragment 的一个方法,我们在开发中需要覆写的那个。...Fragment 的 performCreateView() 方法的返回值是一个 View ,这个View 被返回给了 Activity 中的 onCreateView 方法;这样就实现了遇到 fragment...标签特殊处理并返回 view。
,以后如果再重新打开该 Fragment 的话,就不要再重复的去加载数据了。...比如说,我下载完数据就直接需要对 ui 进行操作,将数据展示出来,但有时却报了 ui 控件 null 异常,这是因为 setUserVisibleHint() 有可能在 onCreateView() 创建...Fragment * view 的复用其实就是指保存第一次创建的 view,后面再 onCreateView() 时直接返回第一次创建的 view * * @param isReuse...首次可见时回调,可在这里进行加载数据,保证只在第一次打开Fragment时才会加载数据, * 这样就可以防止每次进入都重复加载数据 * 该方法会在 onFragmentVisibleChange...如果出现切换回来或不相邻的Tab切换时导致空白界面的问题,解决方法:在 onCreateView中复用布局 + ViewPager 的适配器中复写 destroyItem() 方法去掉 super。
也就是说,在 Activity / Fragment / View / Dialog 中,获取LayoutInflater#getContext(),返回的就是 Activity。...为 false,返回 temp if (root == null || !...= null) { view = mFactory.onCreateView(name, context, attrs); } else { view = null...= null) { view = mPrivateFactory.onCreateView(parent, name, context, attrs); } 4....,关于FragmentController#onCreateView(...)内部如何生成 Fragment 以及返回 View 的逻辑,我们在这篇文章里讨论,请关注:《Android | 考点爆满,带你全方位图解
); 复制代码 甚至于我们平常在Activity里面经常写的setContentView(R.layout.xxx);方法的内部也是通过inflate方法实现的。...setFactory2方法,setFactory2是在SDK>=11以后引入的: ?...this.onCreateView((View)null, name, context, attrs); } //'调用方法2' public final View onCreateView(View...我们知道了在onCreateView中,可以看到遍历的所有View的名字及属性参数,也可以在这里把return的值更改做替换。...总结:设置Factory2更像是在系统填充View之前,先跑了一下onCreateView方法,然后我们可以在这个方法里面,在View被填充前,对它进行修改。 ---- ? 3.
,通过inflater.inflate加载布局文件,接着返回其View 在需要加载Fragment的Activity对应布局文件中的name属性设为全限定类名,即包名.fragment 最后在Activity...()方法返回Fragment的UI布局,需要注意的是inflate()的第三个参数是false,因为在Fragment内部实现中,会把该布局添加到container中,如果设为true,那么就会重复做两次添加...对应的同步方法为commitNow(),commit()内部会有checkStateLoss()操作,如果开发人员使用不当(比如commit()操作在onSaveInstanceState()之后),可能会抛出异常...(getActivity()); textView.setText("上上下下的享受");//是电梯,别误会 4.2 传递数据给Activity 步骤流程: 在Fragment中定义一个内部回调接口...首先获取自己控件的引用 可以在onCreateView()中获取 public View onCreateView(LayoutInflater inflater, ViewGroup container
是来帮助做异步加载 layout 的,inflate(int, ViewGroup, OnInflateFinishedListener) 方法运行结束之后 OnInflateFinishedListener 会在主线程回调返回...简单的说我们知道默认情况下 setContentView 函数是在 UI 线程执行的,其中有一系列的耗时动作:Xml的解析、View的反射创建等过程同样是在UI线程执行的,AsyncLayoutInflater...", "android.app." }; @Override protected View onCreateView(String...,这个类我们会在下面重点分析。...; 此处提一个问题:runInner 运行于循环中,会一直在执行吗?
圆形的旋转加载图标只有一个,所以,如果当前Fragment正处于加载状态,在离开该Fragment时需要隐藏加载动画,因为另一个Fragment并不一定处于加载状态,当返回Fragment时,如果还是处于加载状态...懒加载 懒加载意思也就是当需要的时候才会去加载 那么,为什么Fragment需要懒加载呢,一般我们都会在onCreate()或者onCreateView()里去启动一些数据加载操作,比如从本地加载或者从服务器加载...,不会报null异常 ?...另外,因为ViewPager缓存机制,所以题主进行了view的复用,防止onCreateView()重复的创建view,其实也就是将view设置为成员变量,创建view时先判断是否为null。...()里返回的view,修饰为protected,所以子类继承该类时,在onCreateView里必须对该变量进行初始化 */ protected View rootView;
领取专属 10元无门槛券
手把手带您无忧上云