HBB*_*B20 7 android android-layout android-support-library android-recyclerview
为了复制这个问题,我克隆了一个现有的项目并添加了两个片段.所以现在有Activity一个ViewPager有2个片段.每个Fragment都有一个RecyclerView(垂直),其中包含多个RecyclerView(水平)项.
现在问题是当中RecyclerView点水平RecyclerView位于顶部时,切换选项卡上的垂直自动滚动.
例如:
第1页滚动到此位置
(请注意,第一个H-Recycler视图设置为仅一半可见)
然后点击tablayout上的第2页,转到第2页.
现在再次点击tablayout上的第1页返回页面1.这里预期的滚动位置是我们之前离开的位置,但它会自动滚动到顶部位置.像这样
(首先RecyclerView是完全可见而不是一半.)
在找出解决方案时,我得到了一些线索.
Fragment切换时可以保存滚动状态ViewPager。static让我们在你的变量中有一个变量Activity来存储滚动状态,如下所示
public static int scrollPositionIndex;
public static int scrollPositionOffset;
Run Code Online (Sandbox Code Playgroud)
现在从您的Fragment,覆盖该setUserVisibleHint函数。
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
// Make sure that we are currently visible
if (this.isVisible()) {
// If we are becoming invisible, then...
if (!isVisibleToUser) {
// Save scroll state
LinearLayoutManager layoutManager = ((LinearLayoutManager) mRecyclerView.getLayoutManager());
YourActivity.scrollPositionIndex = layoutManager.findFirstVisibleItemPosition();
View v = mRecyclerView.getChildAt(0);
YourActivity.scrollPositionOffset = (v == null) ? 0 : (v.getTop() - mRecyclerView.getPaddingTop());
} else {
// Scroll to the saved position
mLayoutManager.scrollToPositionWithOffset(YourActivity.scrollPositionIndex,
YourActivity.scrollPositionOffset);
// Reset the value
YourActivity.scrollPositionIndex = 0;
YourActivity.scrollPositionOffset = 0;
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3137 次 |
| 最近记录: |