当然你也可以将所有页面全部缓存,但这样所消耗的内存不言而喻,而且如果数据过多,第一次进去的时候的速度不可估量。所以这次我们使用懒加载来实现我们的需求。...Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); isvisible = true...我们在onActivityCreated处打印Log,然后在 setUserVisibleHint处也打印一句Log,观察结果: 这是因为setUserVisibleHint 在Fragment...之后就已经调用,但是当时还没有初始化完成,我们的子碎片还没有缓存好,所以我们在fragment基类里面定义了一个变量,只有当 onActivityCreated 碎片一定与相关的活动创建完毕的时候再更改变量的值为true...setUserVisibleHint处打印Log,就会发现,先两次false,再true.
(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); //setUserVisibleHint()有可能在...Bundle savedInstanceState) { super.onCreate(savedInstanceState); context = new ContextThemeWrapper(getActivity...; isFragmentVisible = false; rootView = null; isReuseView = true; } private Toast toast;...= null) { toast.cancel(); toast = null; } if(getActivity()!...=null){ toast = Toast.makeText(getActivity(), text, Toast.LENGTH_SHORT); toast.show(); }
* 但是调用到setUserVisibleHint(boolean isVisibleToUser),isVisibleToUser = * true的时候就说明有显示出来 *...,否则就用setUserVisibleHint后保存的值 //总之就是调用了setUserVisibleHint 就使用setUserVisibleHint的值 boolean...= null) { isInit = true; onCreateViewLazy(savedInstanceState); onResumeLazy...= null) { if (isVisibleToUser) { isStart = true; onFragmentStartLazy...onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); context = getActivity
newTabSpec : 新建并返回一个包含具体标记的标签规格。 addTab : 添加一个标签页。...2、从配置页面返回到FragmentActivity时,主页面要从共享参数中读取最新的标签页列表,并构造最新的标签栏。...3、因为重新构造标签栏时,默认显示第一个标签的Fragment页,而不是最近一次返回的Fragment页;所以要在每次进入Fragment页时都把该Fragment保存到全局内存,这样重新构建标签栏时,...平常用户点开某个标签页,该标签页的setUserVisibleHint便被调用;可是第一次打开标签主页面时,默认显示第一个标签页,此时标签页的生命周期为onAttach->setUserVisibleHint...@Override public void onAttach(Context context) { //初始生命周期流程为onAttach->setUserVisibleHint->onCreateView
其实我们忽略的一个问题,Android的fragment里面已经帮我们提供了一个方法setUserVisibleHint。setUserVisibleHint()来显示与隐藏Fragment的。...fragment调用setUserVisibleHint方法。...(true); super.onActivityCreated(savedInstanceState); } 为了方便我们使用我们可以继承fragment重写一下setUserVisibleHint...container, Bundle savedInstanceState) { Trace.d(title + ":onCreateView"); tv = new TextView(getActivity...code_snippet_id="1723966" snippet_file_name="blog_20160621_4_911600" name="code" class="html"> //这里是网络异步请求返回
class LazyFragment extends Fragment{ protected boolean isVisible; @Override public void setUserVisibleHint...(boolean isVisibleToUser) {//frahment从不可见到完全可见的时候,会调用该方法 super.setUserVisibleHint(isVisibleToUser...); //设置是否返回地址信息(默认返回地址信息) aMapLocationClientOption.setNeedAddress(true); //设置是否只定位一次...); //设置是否返回地址信息(默认返回地址信息) aMapLocationClientOption.setNeedAddress(true); //设置是否只定位一次...latitude; lng += op.getPosition().longitude; } // 设置marker的位置为中心位置为聚集点的平均位置
fragment的layout public RecyclerView mCollectRecyclerView;//定义RecyclerView //定义以goodsentity实体类为对象的数据集合...savedInstanceState) { super.onViewCreated(view, savedInstanceState); } @Override public void setUserVisibleHint...(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if (isVisibleToUser...) { goodsEntityList = DBManager.getInstance(getActivity()).queryUserList();...= null) { //触发 onReeshAmount.onClick(goodsEntityList.size()); } }
remove()+add()的生命周期加起来 show(): 不调用任何生命周期方法,调用该方法的前提是要显示的 Fragment已经被添加到容器,只是纯粹把Fragment UI的setVisibility为true...同样,Fragment可以通过getActivity()获取Activity的实例,也是可以执行方法。...传false,就是直接跳到fragment,传true,就是平滑过去。一般主页切换页面都是用false。...需要重写setUserVisibleHint方法,判断fragment是否可见。...由于可能多次onCreateView,所以我们可以把view保存起来,如果为空再去初始化数据。
在平常写代码的生命周期函数内一般是获取不到的: //Activity onCreate(); onResume(); //Fragmen onCreate(); onCreateView(); onResume(); onShow(); setUserVisibleHint...Override public Dialog onCreateDialog(Bundle savedInstanceState) { LayoutInflater inflater = getActivity...().getLayoutInflater(); View view = inflater.inflate(R.layout.xxxx, null); //-----获取View...} }); //-----获取View及其子控件的坐标和长宽信息 end---- Dialog dialog = new Dialog(getActivity...Window.FEATURE_NO_TITLE); dialog.setContentView(view); dialog.setCanceledOnTouchOutside(true
> Fragment 3.Fragment和ViewPager的结合以及懒加载的实现 4.Fragment中如何载入子Fragment ---- 一、生命周期 0.基本的生命周期方法一览 setUserVisibleHint...fm.beginTransaction();//2.fm开启事务 Bundle bundle = new Bundle();//创建Bundle对象 bundle.putString("data", "#ff0000");//为bundle...赋值 BoxFragment boxFragment = new BoxFragment(); boxFragment.setArguments(bundle);//为Fragment设置Arguments...|--- 在旋转屏幕时:Fragment将面临 销毁+重建 ,但测试中Fragment并没有什么变化 |--- 重建的Fragment是系统帮我们做的,那它怎么还原刚才的参数呢(颜色)?...(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); this.isVisibleToUser =
懒加载主要依赖Fragment的setUserVisibleHint(boolean isVisible)方法,当Fragment变为可见时,会调用setUserVisibleHint(true);当Fragment...onCreateView()之前,如果该界面为当前页,则调用setUserVisibleHint(true),否则调用setUserVisibleHint(false)。...界面变为可见时,调用setUserVisibleHint(true)。 *界面变为不可见时,调用setUserVisibleHint(false)。...因为setUserVisibleHint(true)在界面可见时都会调用,如果滑到该界面做过数据加载后,滑走,再滑回来,还是会调用setUserVisibleHint(true),此时由于mIsInited...==false)时,才需要调loadData()做数据加载,数据加载做完后把mIsInited置为true。
简单介绍一下此方法:当fragment被用户可见时,setUserVisibleHint()会调用且传入true值,当fragment不被用户可见时,setUserVisibleHint()则得到false...那大家有没有发现,如果那个Fragment的状态为可见其setUserVisibleHint的值就为true,其余Fragment的值为false,那我们只需要判断,如果setUserVisibleHint...的值就为true即改Fragment为可见状态,我们就执行耗时操作,其他Fragment为false,就不执行网络请求的操作呗。...mIsFirstVisible){ //表示点击home键又返回操作,设置可见状态为ture if(!isHidden()&& !...mIsFirstVisible){ //表示点击home键又返回操作,设置可见状态为ture if(!isHidden()&& !
圆形的旋转加载图标只有一个,所以,如果当前Fragment正处于加载状态,在离开该Fragment时需要隐藏加载动画,因为另一个Fragment并不一定处于加载状态,当返回Fragment时,如果还是处于加载状态...而MeiziDataFragment却先打出了false,然后才打出true,这是因为setUserVisibleHint()在Fragment实例化时会先调用一次,并且默认值是false,当选中当前显示的...跳转到 MeiziDataFragment, 但跟上上面的日志图片不同,这里只打印了两条日志,也就是说即使有三个Fragment被实例化了,但只有显示的那个Fragment和离开的那个Fragment...另外,因为ViewPager缓存机制,所以题主进行了view的复用,防止onCreateView()重复的创建view,其实也就是将view设置为成员变量,创建view时先判断是否为null。...(rootView == null) { return; } hasCreateView = true; if (isVisibleToUser
懒加载主要依赖Fragment的setUserVisibleHint(boolean isVisible)方法,当Fragment变为可见时,会调用setUserVisibleHint(true);当Fragment...onCreateView()之前,如果该界面为当前页,则调用setUserVisibleHint(true),否则调用setUserVisibleHint(false)。...界面变为可见时,调用setUserVisibleHint(true)。 界面变为不可见时,调用setUserVisibleHint(false)。 懒加载Fragment的实现: ?...因为setUserVisibleHint(true)在界面可见时都会调用,如果滑到该界面做过数据加载后,滑走,再滑回来,还是会调用setUserVisibleHint(true),此时由于mIsInited...==false)时,才需要调loadData()做数据加载,数据加载做完后把mIsInited置为true。
使用前需知 2017-7-14更新: 目前有人使用后出现了诸如首次打开显示空白界面,但点击有反应;或来回切换又变空白界面的问题。...比如说,我下载完数据就直接需要对 ui 进行操作,将数据展示出来,但有时却报了 ui 控件 null 异常,这是因为 setUserVisibleHint() 有可能在 onCreateView() 创建...isVisibleToUser = true //如果Fragment从可见->不可见,那么setUserVisibleHint()也会被调用,传入isVisibleToUser = false...; isFragmentVisible = false; rootView = null; isReuseView = true; }...()多余的回调场景,保证只有当fragment可见状态发生变化时才回调 * 回调时机在view创建完后,所以支持ui操作,解决在setUserVisibleHint()里进行ui操作有可能报null
= null) { fragment.setMenuVisibility(true); fragment.setUserVisibleHint...当前Fragment可见时,setUserVisibleHint()回调,其中isVisibleToUser=true。...() --> onStart() --> onResume() 此时,setUserVisibleHint() 中的参数为false,因为不可见。...此时,setUserVisibleHint() 中的参数为true,因为可见。...此时,setUserVisibleHint() 中的参数为false,因为不可见。
正文: 1.Fragment的添加 我们知道Fragment是一个"碎片(或者片段)",添加在Activity中。如果我现在问你,Activity要显示一个按钮Button,你会怎么做? 1....LinearLayout.LayoutParams.WRAP_CONTENT); button.setLayoutParams(params); container.addView(button); 所以Fragment也很简单,就把它当做一个简单的View(但其实更像是...你可以理解为Button设置了View.GONE和View.VISIBLE。...5.无UI的fragment: 5.1 使用Fragment 保持需要恢复对象 调用setRetainInstance(true)方法可保留fragment,如下: @Override public void...我们的目标:FragmentA 启动FragmentB ,然后FragmentB做完事情,返回结果给FragmentA FragmentB.setTargetFragment(FragmentA);
(false)【用户不可见】 > onAttach > onCreate > setUserVisibleHint(true)【用户可见】 > onCreateView > onViewCreated...(true) NF跟PF不相邻:setUserVisibleHint(true) > onCreateView > onViewCreated > onActivityCreated > onStart...(true) NF跟PF不相邻:setUserVisibleHint(true) > onCreateView > onViewCreated > onActivityCreated > onStart...= null ?...例如:应用A中现有两个Activity E、Activity F,为standard启动模式,应用B中有一个Activity G,但其启动模式是singleInstance。
我们知道Fragment是一个"碎片(或者片段)",添加在Activity中。如果我现在问你,Activity要显示一个按钮Button,你会怎么做? 1....LinearLayout.LayoutParams.WRAP_CONTENT); button.setLayoutParams(params); container.addView(button); 所以Fragment也很简单,就把它当做一个简单的View(但其实更像是...你可以理解为Button设置了View.GONE和View.VISIBLE。...我们可以直接在fragment代码里面直接使用getActivity()和getContext()方法。...savedInstanceState) { super.onCreate(savedInstanceState); setRetainInstance(true); .....
默认情况下返回POSITION_UNCHANGED。...onCreateView()之前,如果该界面为当前页,则调用setUserVisibleHint(true),否则调用setUserVisibleHint(false)。...界面变为可见时,调用setUserVisibleHint(true)。 界面变为不可见时,调用setUserVisibleHint(false)。...因为setUserVisibleHint(true)在界面可见时都会调用,如果滑到该界面做过数据加载后,滑走,再滑回来,还是会调用setUserVisibleHint(true),此时由于mIsInited...==false)时,才需要调loadData()做数据加载,数据加载做完后把mIsInited置为true。