2016-05-21 7 views
6

У меня есть recyclerview в моем проекте Android, который отображает содержимое мультимедиа в каждом представлении. То, что я пытаюсь достичь, - это то, что я могу проигрывать/приостанавливать медиа, когда я просматриваю вверх и вниз. Мне нужно получить положение адаптера полностью видимого вида. Я делаю что-то вроде этого.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, даже если вид полностью виден. Другие методы, такие как FindFirstVisibleItemPosition и FindLastVisibleItemPosition, дают правильное положение вида.

Любая идея, что может быть проблемой здесь?

ответ

2

layoutManager.findFirstCompletelyVisibleItemPosition()

ОТ DOCUMENT

Возвращает позицию адаптера на первый полностью ВИДИМОМ зрения. Эта позиция не включает изменения адаптера, которые были отправлены после последнего прохода макета.

Это означает, что, по крайней мере, один вид ListItem должен быть полностью виден в противном случае, оно дает -1 (NO_POSITION)

ИЗ ИСПЫТАНИЙ

Это будет работать и дать правильную позицию ...

Fully Visible ListItem View

Это не сработает и даст -1 (NO_POSITION), потому что два вида ListItem не полностью видны.

enter image description here