recyclerview分页
时间: 2023-09-19 08:12:20 浏览: 165
RecyclerView 分页可以通过以下步骤实现:
1. 定义一个接口来获取数据,例如:
```java
public interface DataProvider {
List<Data> getData(int startIndex, int count);
}
```
2. 创建一个 `RecyclerView.Adapter` 的子类,例如:
```java
public class DataAdapter extends RecyclerView.Adapter<ViewHolder> {
private DataProvider dataProvider;
private List<Data> dataList;
public DataAdapter(DataProvider dataProvider) {
this.dataProvider = dataProvider;
this.dataList = new ArrayList<>();
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// 创建 ViewHolder
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
// 绑定数据到 ViewHolder
}
@Override
public int getItemCount() {
return dataList.size();
}
public void loadMore(int count) {
int startIndex = dataList.size();
List<Data> newData = dataProvider.getData(startIndex, count);
dataList.addAll(newData);
notifyItemRangeInserted(startIndex, newData.size());
}
}
```
3. 在 Activity 或 Fragment 中使用 `DataAdapter`,例如:
```java
public class MyFragment extends Fragment {
private DataAdapter dataAdapter;
private RecyclerView recyclerView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// 创建 RecyclerView 和 DataAdapter
recyclerView = ...;
dataAdapter = new DataAdapter(...);
recyclerView.setAdapter(dataAdapter);
// 加载第一页数据
dataAdapter.loadMore(20);
// 监听 RecyclerView 的滚动事件
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
// 如果滚动到了最后一个 item,加载下一页数据
int lastVisibleItemPosition = ((LinearLayoutManager) recyclerView.getLayoutManager()).findLastVisibleItemPosition();
if (lastVisibleItemPosition == dataAdapter.getItemCount() - 1) {
dataAdapter.loadMore(20);
}
}
});
return recyclerView;
}
}
```
这样,当用户滚动到 RecyclerView 的最后一个 item 时,会自动加载下一页数据。注意,这里使用了 `LinearLayoutManager` 来获取最后一个可见 item 的位置,因此需要在创建 RecyclerView 时设置其 LayoutManager。
阅读全文