layoutManager.findFirstVisibleItemPosition(),带有水平的RecyclerView

时间:2017-05-21 09:45:38

标签: android android-recyclerview linearlayoutmanager

我正在为学校项目编写Android应用程序。

我使用RecyclerView实现了LinearLayoutManager.HORIZONTAL水平滚动。

我想使得特定元素(例如元素n)位于当前可见元素集的中间中,如下所示: enter image description here

我搜索了一下,发现了这个链接: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

0 个答案:

没有答案