-
Notifications
You must be signed in to change notification settings - Fork 2.1k
onLazyInitView 和onSupportVisible方法不回调 #586
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
1、
何时 2、
你描述的是 “懒加载”模式的 大部分情况下,该 |
不是用的 showHideFragment(userinfoFragment, homePageFragmnet) 方法回调的,直接用的Android的原生的show和hide fragment的方法;loadMultipleRootFragment的机制确实一次性加载所有Fragment,这样所有的fragment的onresume 方法都会一次执行完毕,我说的不合理就是这个所有的fragment的onresume方法一次性执行。 |
你描述的场景无法复现问题,可否贴gist 或者demo工程
或者贴下 调用show hide部分的代码, 描述下 调用时机
|
我也有一样的问题,loadMultipleRootFragment()之后就是所有fragment的onSupportVisible()都调用了一遍,onSupportVisible不是只有等fragment可见时才调用吗,加载的时候一次性把所有的fragment的onSupportVisible()都调用了,那这个onSupportVisible()有什么意义。 |
@shercold 可以提供下你的版本信息和gist 或者demo工程,我使用的时候没有这种情况 |
版本号1.1.8 mFragments[FIRST] = DataDailyFragment.newInstance(); |
@shercold emmmmm..刚刚吓到我了. |
补充一下,我调用loadMultipleRootFragment的这个fragment的的 父fragment也是loadMultipleRootFragment()中的一个子fragment,但这个父fragment的onLazyInitView没有调用,也就是说父fragment的onLazyInitView还没调用,子fragment的onLazyInitView已经调用了 |
你 此外:
这个我这边无法复现,嵌套load场景我试了下也没问题 |
loadMultipleRootFragment()里面有三个子fragment1,fragment2,fragment3, |
@shercold 是的,源码中是先分发了 子Fragment的 private void dispatchSupportVisible(boolean visible) {
...
if (!mNeedDispatch) {
mNeedDispatch = true;
} else {
if (checkAddState()) return;
FragmentManager fragmentManager = mFragment.getChildFragmentManager();
if (fragmentManager != null) {
List<Fragment> childFragments = FragmentationHack.getActiveFragments(fragmentManager);
if (childFragments != null) {
for (Fragment child : childFragments) {
if (child instanceof ISupportFragment && !child.isHidden() && child.getUserVisibleHint()) {
((ISupportFragment) child).getSupportDelegate().getVisibleDelegate().dispatchSupportVisible(visible);
}
}
}
}
}
...
mSupportF.onLazyInitView(mSaveInstanceState);
} |
我也出现了同样的问题 |
@flztsj 描述下场景, 上面同学的问题是回调,但是回调顺序有疑问 |
我描述的不是回调顺序的问题哦,你说的是 “源码中是先分发了 子Fragment的onLazyInitView(),再执行自身的onLazyInitView(), 这个执行顺序带了什么不便吗?” ;但我的问题自身还处于不可见状态还不需要调用onLazyInitView()呢,子Fragment的onLazyInitView()就已经调用了,不是顺序问题,而是此时就不应该调用子fragment的onLazyInitView() |
现在造成的问题就是“子fragment的onLazyInitView()没有达到lazy懒加载的效果,而是一初始化就调用了,没有做到 第一次可见才调用 ” |
@shercold 你方便做个demo传上来么,按照你的场景 |
@LonelyMushroom 就是
然后Fragment2里面又
现在的问题就是我一打开app Fragment2的onLazyInitView( )还没调用, |
@YoKeyword 我这边解决了,出现这个的原因是生命周期的问题,加入了300ms延迟就OK了,深入的没有深究,后面有空再看看原因 |
@flztsj 你好,方便说明下你发生问题的场景,以及如何解决的么? |
我也碰到这个致命问题了,A页面viewpage加载了多个fragment,在A页面来回切换,onSupportVisible和onLazyInitView调用正常,然后跳转到B界面,手动控制A界面的viewpage切换到哪个Fragment,关闭B界面,然后切换的Fragment不调用onSupportVisible和onLazyInitView |
@ljf1172361058 终于理解场景了... 稍后修复该问题 :) |
@ljf1172361058 @shercold @flztsj @nuli1228588792 发布了v1.2.5,解决了调用顺序异常的问题 🍺 |
感谢作者,辛苦了,不过更新到1.2.5好像还是一样o(╥﹏╥)o |
@ljf1172361058 根据描述的场景模拟了,应该是没问题的, 我推上了一个测试分支 test586,对应测试的提交是9bcdc70 可以看下 描述:前者是ViewPager,即你场景中的A, 后者是B,在B中点击按钮会给A发送事件,让A切换到第3个子Fragment 结果:在B关闭时,会回调第三个子Fragment的 |
我用 loadMultipleRootFragment 方法在mainActivity加载四个fragment,homePageFragmnet、categoryFragment、discoverFragment、userinfoFragment,进入mainActivity后显示homePageFragmnet,然后直接跳转到其他的activity,再跳转回mainActivity(mainActivity 启动模式是 singleTask),直接显示userinfoFragment,这时userinfoFragment 的onLazyInitView 和onSupportVisible方法都不回调,楼主帮忙看一下呗。
我查了一下loadMultipleRootFragment 方法,是先add 所有的fragment,再hide 不是showPosition的fragment,感觉这么写有点不太合理,这样写导致mainActivity调用loadMultipleRootFragment 方法时,所有的fragment的onResume 方法都会回调,不管这个fragment是不是当前要显示的fragment,我感觉在showPosition时,应该先判断相应的fragment是否为空,为空时add,不为空再show。
The text was updated successfully, but these errors were encountered: