2016-01-11 3 views
5

私はRecyclerViewにビデオプレビューを表示しています。 ユーザーがスクロールしているとき、ビデオは、ユーザーが見ることができるrecyclerViewアイテム(スクロール状態がIDLEの場合)で自動的に再生されます。RecyclerViewのViewをAdapterPositionで取得

私は、ユーザーに表示される位置をメソッドstartVideosOn(int[] positions)の配列として渡すカスタムonScrollListenerを作成しました。

しかし、問題は、ビューを位置(アダプタの位置と同じ位置)で取得したいときです。試してみると、RecyclerViewにはリサイクルされる子が2つしかないので、3番目のアイテムが表示されたらnullと表示されます。

したがって、RecyclerViewのViewをアダプタの位置で取得するにはどうすればよいですか?

編集、これはOnScrollListenerです:

public abstract class AutoPlayRecyclerOnScrollListener extends RecyclerView.OnScrollListener { 

    LinearLayoutManager linearLayoutManager; 

    public AutoPlayRecyclerOnScrollListener(LinearLayoutManager linearLayoutManager) { 
     this.linearLayoutManager = linearLayoutManager; 
    } 

    @Override 
    public void onScrollStateChanged(RecyclerView recyclerView, int newState) { 
     super.onScrollStateChanged(recyclerView, newState); 

     if (newState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) { 
      int firstVisibleItemPosition = linearLayoutManager.findFirstVisibleItemPosition(); 
      int lastVisibleItemPosition = linearLayoutManager.findLastVisibleItemPosition(); 

      if (firstVisibleItemPosition != -1 && lastVisibleItemPosition != -1) { 
       playOn(firstVisibleItemPosition, lastVisibleItemPosition); 
      } 
     } 
    } 

    private void playOn(int lower, int upper) { 
     int[] completelyVisibleItems = new int[upper - lower + 1]; 

     for (int i = lower, j = 0; i <= upper; i++, j++) { 
      completelyVisibleItems[j] = i; 
     } 

     playOn(completelyVisibleItems); 
    } 

    public abstract void playOn(int[] items); 
} 
+0

スクロールリスナーコード – pskink

+1

は、「RecyclerView#findViewHolderForAdapterPosition(int position)」または「RecyclerView#findViewHolderForLayoutPosition(int position)」を試行しましたか? – pskink

+0

@pskinkこれを回答として投稿できますか?それを受け入れることができますか? – PatrickMA

答えて

11

あなたが目に見える "位置" のいずれかの使用のために任意のViewを取得する必要がある場合:

RecyclerView#findViewHolderForAdapterPosition(int position) 

または

RecyclerView#findViewHolderForLayoutPosition(int position) 

返されたViewHolderは、Viewを持っています。

+1

ありがとうございます。なぜ私はこれを見つけられなかったのかわかりません。 – PatrickMA

+0

あなたは大歓迎です...幸せなコーディング;) – pskink

+0

おそらく、それは 'RecyclerView'クラスにあり、' RecyclerView#Adapter'ではなく、私たちが主に扱うものですから... –

関連する問題