2016-05-21 429 views
6

我在我的android項目中有一個recyclerview,它顯示了每個視圖中的媒體內容。我想要實現的是我可以在上下滾動時播放/暫停媒體。我需要獲取完全可見視圖的適配器位置。我正在做這樣的事情。layoutmanager.FindFirstCompletelyVisibleItemPosition總是返回-1

在我的活動片段我有這樣的:

 layoutmanager = new LinearLayoutManager(Activity); 

     adapter = new FeedAdapter(vid, userName, this.Context); 

     feeditem.SetLayoutManager(layoutmanager); 
     feeditem.SetAdapter(adapter); 

     var onScrollListener = new XamarinRecyclerViewOnScrollListener(Activity, layoutmanager, adapter); 

滾動監聽事件是這樣的:

public override void OnScrollStateChanged(RecyclerView recyclerView, int newState) 
    { 
     base.OnScrollStateChanged(recyclerView, newState); 

     if (newState == (int)ScrollState.Idle) 
     { 
      layoutmanager = (LinearLayoutManager)recyclerView.GetLayoutManager(); 

      int firstVisiblePosition = layoutmanager.FindFirstCompletelyVisibleItemPosition(); 
      int visible = layoutmanager.FindFirstVisibleItemPosition(); 
      int last = layoutmanager.FindLastVisibleItemPosition(); 
      if (firstVisiblePosition >= 0) 
      { 
       if (oldFocusedLayout != null) 
       { 
        Toast.MakeText(ctx, "Stop Video", ToastLength.Long).Show(); 
       } 


      } 
      currentFocusedLayout = layoutmanager.FindViewByPosition(firstVisiblePosition); 

      Toast.MakeText(ctx, "Play video", ToastLength.Long).Show(); 

      oldFocusedLayout = currentFocusedLayout; 

     } 
    } 

     feeditem.AddOnScrollListener(onScrollListener); 

的問題是LinearLayout中管理方法FindFirstCompletelyVisibleItemPosition總是返回-1,即使視圖完全可見。其他方法如FindFirstVisibleItemPositionFindLastVisibleItemPosition給出了視圖的正確位置。

任何想法可能是這裏的問題?

回答

2

layoutManager.findFirstCompletelyVisibleItemPosition()

FROM DOCUMENT

返回FIRST完全可見視圖的適配器的位置。此位置不包括在上次佈局傳遞後分派的適配器更改。

這意味着,至少一個列表項視圖應該是完全可見的,否則,它給-1(NO_POSITION)

從測試中

這將工作,並給予正確的位置...

Fully Visible ListItem View

這不會工作,並給-1(NO_POSITION),因爲兩個ListItem視圖不完全可見。

enter image description here