Neo*_*Neo 8 android gridlayoutmanager
我正在使用StaggeredGridLayoutManager作为我的图片库.我已经设置好了setReverseLayout(true),所以图像从底部堆叠起来.
我面临的问题是在初始化app时,滚动点位于图库底部.当用户第一次启动应用程序时,我希望滚动位于库的顶部.
我已经尝试过使用scrollToPosition(下面的代码片段)但是滚动结果在画廊中间的某个地方结束,可能是因为在调用时图像没有正确加载scrollToPosition.
mLayoutManager = new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL);
mLayoutManager.setReverseLayout(true);
mRecyclerView.setLayoutManager(mLayoutManager);
mImageList = ((MainActivity)getActivity()).getImages();
adapter = new ImageAdapter(getActivity(),mImageList);
mRecyclerView.setAdapter(adapter);
mRecyclerView.scrollToPosition(mImageList.size()-1);
Run Code Online (Sandbox Code Playgroud)
是否有正确的方法将滚动指向顶部而不是底部?
我之前解决过类似的问题,方法如下:
mRecyclerView.getViewTreeObserver().addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() {
@SuppressWarnings("deprecation")
@Override
public void onGlobalLayout() {
ViewTreeObserver observer = mRecyclerView.getViewTreeObserver();
scrollRecyclerViewToTop();
if (!observer.isAlive()) {
return;
}
if (mScrolledByUser) {
if (hasJellyBeanApi()) {
observer.removeOnGlobalLayoutListener(this);
} else {
observer.removeGlobalOnLayoutListener(this);
}
}
}
});
Run Code Online (Sandbox Code Playgroud)
和:
mRecyclerView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
mScrollByUser = true;
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
和:
private void scrollRecyclerViewToTop() {
mRecyclerView.scrollToPosition(0);
mRecyclerView.scrollBy(0, Integer.MIN_VALUE);
}
Run Code Online (Sandbox Code Playgroud)
含义很简单:让RecyclerView始终滚动到顶部,直到用户触摸它。希望这可以帮到你。
| 归档时间: |
|
| 查看次数: |
1369 次 |
| 最近记录: |