Alzzzz
Alzzzz
我也遇到了相同的问题,产生的原因是因为manager的onItemsChanged方法直接调用了helper中的clear,将原有排列顺序进行了清空,然后滑动时发现没有了记录所以重新计算位置,导致顺序错乱,我的临时修改方式是将清空方法暴露出来,然后将其在helper的onItemsChanged方法中删除,让用户自己决定是否清空(即上拉加载时不操作,重新请求数据时清空)。
@huclengyue StaggeredGridLayoutHelper是这个类 不过好像还有别的问题
@longerian 确实打错字了应该是: position为1的View比position为0的View要高的时候 以下是我修改的方式,有部分注释: ``` public void checkAnchorInfo(RecyclerView.State state, VirtualLayoutManager.AnchorInfoWrapper anchorInfo, LayoutManagerHelper helper) { super.checkAnchorInfo(state, anchorInfo, helper); ensureLanes(); final Range range = getRange(); if (anchorInfo.layoutFromEnd) { if (anchorInfo.position < range.getLower()...
 修改后就正常了
我的ViewHolder是同一个,只是有高有低而已,这是我瀑布流helper的设置方法 `mStaggeredGridLayoutHelper.setMargin(ScreenUtils.Dp2Px(getContext(), 10), 0, ScreenUtils.Dp2Px(getContext(), 10), 0); mStaggeredGridLayoutHelper.setHGap(ScreenUtils.Dp2Px(getContext(), 5)); mStaggeredGridLayoutHelper.setVGap(ScreenUtils.Dp2Px(getContext(), 5));` 如果我的VGap设置为0的话也不会出现这个问题。 根据checkAnchorInfo()方法里的判断 `final boolean layoutInVertical = helper.getOrientation() == VERTICAL;` 当我把第一列的第一个元素滑到屏幕外,但第二列第一个元素还在屏幕中时,这个判断就是false的,此时按照原来代码, `offset = -(isStartLine ? 0 : mainGap);` `span.cacheReferenceLineAndClear(helper.getReverseLayout() ^...
@longerian 之前我发的那个GIF图就是这样的情况啊,左边的第一个元素已经滑上去了,右边的第一个元素那不是还在外面嘛...这时候刷新就会有问题
是这样的,一开始是正常一起滑动的,但是当左边第一个View滑动出去后,此时停止手动滑动,然后现在子View中又有刷新布局的操作,例如gif图里面的动画或者是视频播放等,就会造成右边列自动往上移动一段距离。 主要原因就是布局的时候拿的mCachedStart不正确。
OK,由于上拉加载也经常会错位,我查了一下是因为缓存在上拉加载后被清除了,我把清楚缓存的操作放到了外面,只有在重新布局的时候才清除缓存。 ` @Override public void onItemsChanged(LayoutManagerHelper helper) { // mLazySpanLookup.clear(); }`
> > 目前有没有实际上线用例哈 > > 目前没有实际上过 app store ? 已经有不少在APP STORE上架的APP了
可以直接扫码进入02群哦