我有以下方法問題最後可見項:RecyclerView:發現後立即視圖中創建
int firstVisibleItemPosition = gridLayoutManager.findFirstVisibleItemPosition();
int lastVisibleItemPosition = gridLayoutManager.findLastVisibleItemPosition();
我的目標:保存關於項目的用戶觀看了分析數據。
爲了做到這一點,我調用這個方法在兩個不同的方案:
每滾動一次轉身「閒置」狀態,並檢查哪些可見的項目。在那種情況下,我得到了預期的指標。
當
RecyclerView
變得對用戶可見時。 現在是問題出現的時間。我期望當包含recylcerView的片段通過onResume()
時,則調用findLastVisibleItemPosition()
將返回可見項目。 但在此情況下返回-1。我想這與異步加載recyclerView +適配器內部項目初始化相對於片段/活動生命週期有關。
通過推遲該代碼由幾毫秒 - findLastVisibleItemPosition()
返回正確的索引。但我不想推遲使用處理程序+延遲可運行的硬編碼,因爲調度延遲可運行是解決我真正想做的事情:檢測回收器視圖何時完成充氣並在屏幕上繪製所有視圖腳它裏面..
所以我的問題基本上都是:
如何檢測時RecyclerView完成了所有initialzation /測量/充氣和它的孩子物品英尺屏幕的圖紙? (在任何用戶交互之前)。
是否有任何可靠的良好實踐方式來確切地知道回收站視圖中的哪些項目真的顯示在屏幕上?
嗨,在這篇文章後,@Tal Kanel,你有沒有得到可靠的答案?我有點類似的問題。 – hadez30
@ hadez30:我的解決方案是運行代碼檢查從UI線程上的處理程序發佈的可運行的第一個可見項目(不延遲..)。這就是爲什麼它在UI隊列的末尾執行,根據我的經驗,在視圖本身已經改變了尺寸時調用onLayoutChange()的視圖,而不是當他的嵌套子視圖執行時,視圖已經附加到回收視圖 –