layoutmanager.FindFirstCompletelyVisibleItemPosition始终返回-1

时间:2016-05-21 14:03:02

标签: android android-recyclerview linearlayoutmanager

我的android项目中有一个recyclerview,它在每个视图中显示媒体内容。我想要实现的是,当我向上和向下滚动时,我能够播放/暂停媒体。我需要获得完全可见视图的适配器位置。我正在做这样的事情。

在我的活动片段中,我有这个:

        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)可以提供正确的视图位置。

知道这里可能出现什么问题?

1 个答案:

答案 0 :(得分:2)

  

layoutManager.findFirstCompletelyVisibleItemPosition()

FROM DOCUMENT

返回 FIRST FULLY VISIBLE 视图的适配器位置。此位置不包括在最后一次布局传递后调度的适配器更改。

这意味着,至少有一个listitem视图应该完全可见,否则它会给-1(NO_POSITION)

FROM TESTING

这将起作用并给出正确的位置......

Fully Visible ListItem View

这不会起作用并给出-1(NO_POSITION),因为两个ListItem视图不完全可见。

enter image description here