RecyclerView.LayoutManager中没有findLastVisibleItemPosition方法
时间: 2024-03-28 12:37:00 浏览: 28
是的,RecyclerView.LayoutManager确实没有findLastVisibleItemPosition方法。不过,LayoutManager的子类LinearLayoutManager、GridLayoutManager和StaggeredGridLayoutManager都提供了相应的方法来获取最后一个可见item的位置。
例如,如果你使用LinearLayoutManager,你可以使用findLastVisibleItemPosition()方法来获取最后一个可见item的位置。如果你使用GridLayoutManager,你可以使用findLastVisibleItemPosition()方法和getSpanCount()方法来计算最后一个可见item的位置。如果你使用StaggeredGridLayoutManager,你可以使用findLastVisibleItemPositions()方法来获取每个span的最后一个可见item的位置。
相关问题
RecyclerView判断滚动到了列表底部
RecyclerView滚动到列表底部的判断可以通过以下步骤实现:
1. 获取RecyclerView的LayoutManager对象,可以通过以下方式获取:
```
RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager();
```
2. 获取RecyclerView的Adapter对象,可以通过以下方式获取:
```
RecyclerView.Adapter adapter = recyclerView.getAdapter();
```
3. 获取RecyclerView中最后一个可见的item的位置,可以通过以下方式获取:
```
int lastVisibleItemPosition = layoutManager.findLastVisibleItemPosition();
```
4. 获取RecyclerView中item的总数,可以通过以下方式获取:
```
int itemCount = adapter.getItemCount();
```
5. 判断最后一个可见的item的位置是否等于item总数减1,如果是,则说明RecyclerView已经滚动到了列表底部:
```
if (lastVisibleItemPosition == itemCount - 1) {
// 滚动到了列表底部
}
```
完整的示例代码如下:
```
RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager();
RecyclerView.Adapter adapter = recyclerView.getAdapter();
int lastVisibleItemPosition = layoutManager.findLastVisibleItemPosition();
int itemCount = adapter.getItemCount();
if (lastVisibleItemPosition == itemCount - 1) {
// 滚动到了列表底部
}
```
recyclerView在adapter中怎么判断当前item是否可见
在 `RecyclerView` 的 `Adapter` 中判断当前 `item` 是否可见的方法,可以通过 `RecyclerView` 的 `findViewHolderForAdapterPosition()` 方法来获取当前 `item` 的 `ViewHolder`,并判断它是否为 `null`,从而来判断当前 `item` 是否可见。
具体的代码实现如下:
```java
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
// 判断当前 item 是否可见
if (recyclerView.getLayoutManager() instanceof LinearLayoutManager) {
LinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
int firstVisibleItemPosition = layoutManager.findFirstVisibleItemPosition();
int lastVisibleItemPosition = layoutManager.findLastVisibleItemPosition();
if (position >= firstVisibleItemPosition && position <= lastVisibleItemPosition) {
// 当前 item 可见
} else {
// 当前 item 不可见
}
}
}
```
其中,`recyclerView` 是 `RecyclerView` 控件的实例,`MyViewHolder` 是自定义的 `ViewHolder` 类,`position` 是当前 `item` 的位置。在 `onBindViewHolder()` 方法中,通过 `recyclerView.getLayoutManager()` 方法获取到当前 `RecyclerView` 的 `LayoutManager` 对象,然后通过 `findFirstVisibleItemPosition()` 和 `findLastVisibleItemPosition()` 方法来获取当前可见的第一个和最后一个 `item` 的位置,最后根据 `position` 是否在这个范围内来判断当前 `item` 是否可见。
相关推荐
![.zip](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)