2016-05-16 51 views
2

我有一個項目列表。這些項目按日期排序。當用戶打開應用程序時,用戶應該能夠通過將列表滾動到頂部來查看它們。如何使用RecyclerView和LinearLayoutManager無論項目計數在頂部顯示項目?

我發現第一個項目的日期爲position(「新」項目),並致電recyclerView.scrollToPosition(position)。我也試過layoutManager.scrollToPositionWithOffset(position, 0)

如果列表中有許多「新」項目,這將起作用。

但是,如果項目太少(例如,一個「舊」和一個「新」),那麼這些方法不起作用。

如何以編程方式將列表滾動到指定位置的項目以將該項目置於頂部,而不管列表中有多少項目?

+0

試試這個adapter.notifydatasetchanged();在調用recyclerView.scrollToPosition(position)之前; – IMRAN

+0

當我調用'recyclerView.scrollToPosition()'時,'adaptor'已經用items初始化並綁定到'recyclerView'。在此之前調用'adapter.notifyDataSetChanged()'。 – mixel

回答

2

最初,爲RecyclerView提供一個僅包含未來事件的數據集。

recyclerView上設置onTouchListner來檢測向上滾動。如果findFirstCompletelyVisibleItemPosition()在檢測到向上滾動時返回第一個索引,則表示上捲過度滾動。然後,更改數據集以包含舊條目。然後,使用adapter.notifyDataSetChanged()通知適配器數據集更改並重新繪製列表。

注:

  1. 當您第RecyclerView設置onTouchListner確保您 不吸收觸摸事件[onTouchEvent() should return false]

  2. 有一次,您檢測到第一次向上滾動, 您可以設置一個標誌來表示您不需要更改未來觸摸事件的數據集 。