在安卓开发中 列表数据量过多时用分页加载进行优化 代码
时间: 2024-03-12 17:47:54 浏览: 81
好的,针对您的问题,我可以提供如下的参考代码:
```java
public class MyActivity extends AppCompatActivity {
private RecyclerView mRecyclerView;
private MyAdapter mAdapter;
private List<MyData> mDataList;
private int mPage = 1; // 当前页数
private boolean mIsLoading = false; // 是否正在加载数据
private boolean mIsLastPage = false; // 是否是最后一页
private int mTotalPages = 10; // 总页数
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
mRecyclerView = findViewById(R.id.recyclerView);
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(layoutManager);
mDataList = new ArrayList<>();
mAdapter = new MyAdapter(mDataList);
mRecyclerView.setAdapter(mAdapter);
// 加载第一页数据
loadData(mPage);
// 监听列表滑动事件,到达底部自动加载下一页数据
mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
if (!mIsLoading && !mIsLastPage) {
int visibleItemCount = layoutManager.getChildCount();
int totalItemCount = layoutManager.getItemCount();
int firstVisibleItemPosition = layoutManager.findFirstVisibleItemPosition();
if (visibleItemCount + firstVisibleItemPosition >= totalItemCount
&& firstVisibleItemPosition >= 0) {
loadData(mPage + 1);
}
}
}
});
}
// 加载数据
private void loadData(int page) {
mIsLoading = true;
// 发起网络请求获取数据,这里只是模拟异步请求
new Handler().postDelayed(() -> {
List<MyData> dataList = getData(page);
if (dataList != null) {
mDataList.addAll(dataList);
mAdapter.notifyDataSetChanged();
mPage = page;
mIsLastPage = mPage == mTotalPages;
}
mIsLoading = false;
}, 1000);
}
// 模拟网络请求获取数据
private List<MyData> getData(int page) {
if (page > mTotalPages) {
return null;
}
List<MyData> dataList = new ArrayList<>();
for (int i = 0; i < 10; i++) {
MyData data = new MyData();
data.setTitle("Title " + (page - 1) * 10 + i);
data.setContent("Content " + (page - 1) * 10 + i);
dataList.add(data);
}
return dataList;
}
}
```
在上面的代码中,我们通过监听列表的滑动事件,在到达底部时自动加载下一页数据。为了防止重复加载数据,我们使用 `mIsLoading` 变量标记是否正在加载数据,使用 `mIsLastPage` 变量标记是否已经是最后一页。同时,我们使用 `mTotalPages` 变量来记录总页数。
在 `loadData` 方法中,我们发起网络请求获取数据,这里我们只是模拟异步请求。在请求返回后,我们将数据添加到 `mDataList` 中,并通知列表数据发生变化。最后更新当前页数 `mPage`,并判断是否已经是最后一页。
以上就是一个简单的分页加载列表的实现代码。当然,具体的实现方式可能会因为不同的业务需求和技术栈而有所不同。
阅读全文