我正在为学校项目编写Android应用程序。
我使用RecyclerView
实现了LinearLayoutManager.HORIZONTAL
水平滚动。
我想使得特定元素(例如元素n)位于当前可见元素集的中间中,如下所示:
我搜索了一下,发现了这个链接:https://www.reddit.com/r/androiddev/comments/3o0xzw/how_do_you_scroll_to_an_item_with_recyclerview_to/
解决方案涉及将layoutManager.findFirstVisibleItemPosition()
和layoutManager.findLastVisibleItemPosition()
的总和减半,并将其添加到您想要位于中间的元素的位置。
然而,当我使用这个水平滚动RecyclerView.NO_POSITION
时,这两个方法总是返回RecyclerView
,因此一半的总和将为0,这会使计算失效。
这是我的代码:
RecyclerView selectDay = (RecyclerView) findViewById(R.id.lv_selectDay);
daySelectorAdapter adapter = new daySelectorAdapter(this, arrayList);
LinearLayoutManager layoutManager = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false);
selectDay.setAdapter(adapter);
selectDay.setLayoutManager(layoutManager);
int firstVisible = layoutManager.findFirstVisibleItemPosition();
Log.d("FIRSTVISIBLE", String.valueOf(firstVisible)); // returns -1
int lastVisible = layoutManager.findLastVisibleItemPosition();
Log.d("LASTVISIBLE", String.valueOf(lastVisible)); // also -1
int halfScreenOffset = (lastVisible - firstVisible) / 2;
Log.d("HALFOFFSET", String.valueOf(halfScreenOffset));
layoutManager.scrollToPositionWithOffset((15 + halfScreenOffset), 0);
我是否知道是否有人解决此问题?提前谢谢。
编辑:当我尝试实施onScrollListener
并将recyclerView.getLayoutManager()
投射到LinearLayoutManager
时,这些方法完全正常。我可以知道为什么吗?
编辑2:
我在这里使用了这个解决方案:RecyclerView smoothScroll to position in the center. android,但为什么这些方法会返回NO_POSITION
?