2017-08-01 24 views
-1

如何獲得再循環器視圖中物品的x/y。 mRecyclerView.getChildAt(1)讓孩子在位置1可見。 我想在第一個位置獲取列表子,以在達到0,0時執行某些操作。獲取'x'物品在RecyclerView中的位置

if(mRecyclerView.getChildAt(1).getTop() == 0){ 

//do some operation 

} 

我該如何實現它?

+0

https://stackoverflow.com/questions/38004369/get-xy-positions-of-nth-item-in-recyclerview?rq=1 –

+0

@LalitSinghFauzdar的可能重複,我想要的特定項目的頂部位置,即位置2處的項目,但在此沒有提供關於此的解決方案。 –

回答

1

有2種方法來實現這一目標:

  1. 創建您自己的LayoutManager(也將延長LinearLayoutManager爲例),其連接到你的RecyclerView,並獲得滾動RecyclerView第一個孩子的位置。

    public class MyLinearLayoutManager extends LinearLayoutManager { 
    
    //Constructor stuff 
    
    @Override 
    public int scrollVerticallyBy(int dy, RecyclerView.Recycler recycler, RecyclerView.State state) { 
        if (getChildAt(1).getTop() == 0) { 
         // do stuff... 
        } 
        return super.scrollVerticallyBy(dy, recycler, state); 
    } 
    
    @Override 
    public void onLayoutCompleted(RecyclerView.State state) { 
        super.onLayoutCompleted(state); 
        // check your stuff here too. It'll be called when new views appeared 
    } 
    } 
    
  2. 將滾動偵聽器附加到RecyclerView並獲取視圖位置。

    RecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { 
         @Override 
         public void onScrolled(RecyclerView recyclerView, int dx, int dy) { 
          RecyclerView.ViewHolder holder = RecyclerView.findViewHolderForAdapterPosition(1); 
          View view = holder.itemView; 
          if (view.getTop() == 0){ 
           //... 
          } 
         } 
        }); 
    
+0

什麼是'綁定'? –

+0

getChildAt(1)給出屏幕上可見的第一個孩子 –

+0

@AshishJohn綁定在我的情況下是ViewDataBinding對象 – Ekalips

相關問題