2016-07-07 68 views
3

我有一個回調,在通過LinearLayoutManager.smoothScrollToPosition()程序化滾動到RecyclerView的某個項目後觸發。用戶點擊一個項目,右邊的項目滾動到RecyclerView的頂部。我對LinearLayoutManager進行了分類,使其始終捕捉到該項目的頂部。
這適用於滾動事件被觸發的情況,但是當RecyclerView已經處於正確的位置時,我沒有得到onScrollStateChanged回調,因爲沒有滾動發生。無論如何,是否有辦法獲得該事件?就像事先決定RecyclerView是否需要滾動一樣?檢查RecyclerView是否需要滾動

+0

你可以檢查,如果你想滾動到該項目(位置)已經在調用之前的屏幕* LinearLayoutManager.smoothScrollToPosition()* – Bugdr0id

+0

這是不夠的,因爲它可能在屏幕上,但不在視圖的頂部,在這種情況下無論如何滾動都會發生。 – Alf

+0

如何layoutManager.findFirstCompletelyVisibleItemPosition() – SoroushA

回答

-1

我發現下面的解決辦法自己:

// get the view the user selected 
View view = mLayoutManager.findViewByPosition(index); 
// get top offset 
int offset = view.getTop(); 
if (offset == 0) { // the view is at the top of the scrollview 
    showDetailViewInternal(event); 
} else { 
    // scrolling 
} 
+0

如果它是列表中的最後一項,它將不起作用,因爲它永遠不會滾動到頂部。 –

1

希望下面的代碼將有助於

if(LinearLayoutManager.findFirstCompletelyVisibleItem() == yourDesiredPosition) { 
    //do your stuff 
} else { 
    LinearLayoutManager.scrollToPositionWithOffset(yourDesiredPosition, offset); 
    //onScrollStateChanged would be trigger then. 
} 
+0

不,這只是告訴我,我正在尋找的項目是完全可見的屏幕上。它沒有告訴我關於滾動位置的任何信息。該項目可能是可見的,但在屏幕的底部,然後RecyclerView將滾動。 – Alf

+0

我對你的要求有一個想法。如果在這種情況下,所有適配器項目都不覆蓋整個屏幕,則不會觸發滾動事件。嘗試將透明視圖添加到適配器佈局,並在不包含整個屏幕的情況下使其顯示在最後一個項目中。爲透明視圖指定一個固定的高度,以便它離開屏幕。 – user320676

+0

爲什麼這意味着滾動事件不會被解僱?無論如何,我發現比將透明視圖添加到我的佈局更好的解決方案。看到我上面的答案。 – Alf

相關問題