8

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

问题是FindFirstCompletelyVisibleItemPosition即使视图完全可见,线性布局管理器方法也总是返回 -1。其他方法喜欢FindFirstVisibleItemPositionFindLastVisibleItemPosition给出视图的正确位置。

知道这里可能是什么问题吗?

4

1 回答 1

3

layoutManager.findFirstCompletelyVisibleItemPosition()

文件

返回第一个完全可见视图的适配器位置。此位置不包括在最后一次布局传递之后调度的适配器更改。

这意味着,至少一个列表项视图应该是完全可见的,否则它会给出 -1 (NO_POSITION)

来自测试

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

完全可见的 ListItem 视图

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

在此处输入图像描述

于 2016-11-29T03:40:56.110 回答