我的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。其他方法(如FindFirstVisibleItemPosition
和FindLastVisibleItemPosition
)可以提供正确的视图位置。
知道这里可能出现什么问题?
答案 0 :(得分:2)
layoutManager.findFirstCompletelyVisibleItemPosition()
FROM DOCUMENT
返回 FIRST FULLY VISIBLE 视图的适配器位置。此位置不包括在最后一次布局传递后调度的适配器更改。
这意味着,至少有一个listitem视图应该完全可见,否则它会给-1(NO_POSITION)
FROM TESTING
这将起作用并给出正确的位置......
这不会起作用并给出-1(NO_POSITION),因为两个ListItem视图不完全可见。