2016-05-21 26 views
6

Ich habe eine recyclerview in meinem Android-Projekt, die Medieninhalte in jeder Ansicht anzeigt. Was ich versuche zu erreichen, ist, dass ich Medien abspielen/pausieren kann, während ich nach oben und unten scrolle. Ich muss die Adapterposition der vollständig sichtbaren Ansicht erhalten. Ich mache so etwas.layoutmanager.FindFirstCompletelyVisibleItemPosition liefert immer -1

In meiner Tätigkeit Fragment habe ich dies:

 layoutmanager = new LinearLayoutManager(Activity); 

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

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

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

Das Scroll-Listener Ereignis wie folgt aussieht:

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); 

Das Problem ist, dass der Linearlayout Manager Methode FindFirstCompletelyVisibleItemPosition immer -1 zurück, auch wenn die Die Ansicht ist vollständig sichtbar. Andere Methoden wie FindFirstVisibleItemPosition und FindLastVisibleItemPosition gibt die richtige Position der Ansicht.

Irgendeine Idee, was könnte das Problem hier sein?

Antwort

2

layoutManager.findFirstCompletelyVisibleItemPosition()

FROM DOCUMENT

gibt die Adapter Position der ersten voll VISIBLE Ansicht. Diese Position enthält keine Adapteränderungen, die nach dem letzten Layoutdurchlauf ausgeführt wurden.

Es bedeutet, dass mindestens eine listitem Ansicht ansonsten vollständig sichtbar sein soll, geben -1 (NO_POSITION)

VON TESTS

Dies funktioniert und korrekte Position geben ...

Fully Visible ListItem View

Dies funktioniert nicht und gibt -1 (NO_POSITION), weil zwei ListItem-Ansicht nicht vollständig sichtbar ist.

enter image description here

Verwandte Themen