2017-08-01 15 views
-1

リサイクルビューのアイテムのx/yを取得する方法。 mRecyclerView.getChildAt(1)は、子が位置1に表示されるようにします。 リストの子を1位で取得して、0,0に達したときに何らかの操作を実行したいとします。RecyclerViewの 'x'アイテムの位置を取得する

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)は、画面に表示されている1番目の子を与えています –

+0

私のケースでは@AshishJohnバインディングはViewDataBindingオブジェクトです – Ekalips

関連する問題