我一直在寻找合适的API来完成我需要做的事情,但我几乎肯定必须要有一个API。但我找不到。
这是我的问题:
我正在回收器视图中显示一个ArrayList。我需要知道的是,当我上下滚动时,ArrayList中的哪个项目显示在回收器视图的顶部。这是我设置回收者视图的方式(没什么特别的):
private ArrayList<Transaction> filteredTransactions = new ArrayList<>();
...
recyclerView = view.findViewById(R.id.feed_recycle_view);
recyclerView.setHasFixedSize(true);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager((getActivity()));
adapter = new FeedAdapter(filteredTransactions);
recyclerView.setLayoutManager(linearLayoutManager);
recyclerView.setAdapter(adapter);
我碰到
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
}
提供了我需要的侦听器,但是我不知道如何从中获取显示在视图顶部的项目。
提前感谢
findFirstCompletelyVisibleItemPosition()将返回第一个完全可见的视图的适配器位置。
您可以这样操作:
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
int itemPoition = ((LinearLayoutManager) recyclerView.getLayoutManager()).findFirstCompletelyVisibleItemPosition();
// Get the item from the list
mList.get(itemPoition)
}
您可以使用LinearLayoutManager的以下方法
int findFirstVisibleItemPosition();
int findFirstCompletelyVisibleItemPosition();
int findLastVisibleItemPosition();
int findLastCompletelyVisibleItemPosition();
阅读official文档
[有些方法可以在线性布局管理器中使用,如
findFirstCompletelyVisibleItemPosition()
int findFirstVisibleItemPosition()
int findLastCompletelyVisibleItemPosition()
findLastVisibleItemPosition()
通过documentation肯定会为您提供帮助。