2016-05-02 2 views
1

Я использую код, как показано ниже, чтобы получить видимый элемент внутри recyclerviewПолучение видимого элемента внутри RecyclerView

В стороне моей Fragment деятельности у меня есть:

layoutmanager = new LinearLayoutManager(Activity); 

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

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

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

     feeditem.AddOnScrollListener(onScrollListener); 

и обработчик события класса выглядит так:

public class XamarinRecyclerViewOnScrollListener : RecyclerView.OnScrollListener 
{ 
    public delegate void LoadMoreEventHandler(object sender, EventArgs e); 

    public event LoadMoreEventHandler LoadMoreEvent; 

    private LinearLayoutManager layoutmanager; 

    private Action StateChange; 

    private FeedAdapter adapter; 

    private View currentFocusedLayout, oldFocusedLayout; 

    private Context ctx; 

    public XamarinRecyclerViewOnScrollListener(LinearLayoutManager layoutManager) 
    { 
     this.layoutmanager = layoutManager; 
    } 

    public XamarinRecyclerViewOnScrollListener(Context ctx, LinearLayoutManager layoutmanager, FeedAdapter adapter) 
    { 
     // TODO: Complete member initialization 
     this.layoutmanager = layoutmanager; 

     this.adapter = adapter; 

     this.ctx = ctx; 

     //this.StateChange = StateChange; 
    } 

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

      if (firstVisiblePosition >= 0) 
      { 
       if (oldFocusedLayout != null) 
       { 
        Toast.MakeText(ctx, "Stop Video", ToastLength.Long).Show(); 
       } 


      } 
      currentFocusedLayout = layoutmanager.FindViewByPosition(firstVisiblePosition); 
      //VideoView vv_dashboard = (VideoView)currentFocusedLayout.findViewById(R.id.vv_dashboard); 
      ////to play video of selected recylerview, videosData is an array-list which is send to recyclerview adapter to fill the view. Here we getting that specific video which is displayed through recyclerview. 
      //playVideo(videosData.get(positionView)); 

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

      oldFocusedLayout = currentFocusedLayout; 

     } 
    } 
} 

layoutmanager.FindFirstCompletelyVisibleItemPosition() всегда возвращает -1. Я хочу установить элемент в списке, который отображается на экране, а затем что-то делать с ним. Я пробовал разные решения, но никто из них не работал. Каков правильный способ достижения этого?

+0

может кто-нибудь помочь пожалуйста ?? –

ответ

0

Если он обнаруживает -1, это означает, что RecyclerView не обнаруживает никаких элементов внутри макета.

 Смежные вопросы

  • Нет связанных вопросов^_^