我想从服务器加载更多数据。我应该从 RecyclerView
中的项目中获取 firstItemId
。在 listView
中,我就是这样做的。
listMain.setOnScrollListener( new AbsListView.OnScrollListener() {
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
if (firstVisibleItem + visibleItemCount == totalItemCount && totalItemCount != 0) {
if (lasttotal[getArguments().getInt( ARG_SECTION_NUMBER )] != totalItemCount) {
lasttotal[getArguments().getInt( ARG_SECTION_NUMBER )] = totalItemCount;
lastpage[getArguments().getInt( ARG_SECTION_NUMBER )]++;
try {
JSONObject js_id = new JSONObject( view.getItemAtPosition( firstVisibleItem - 2 ).toString() );
static_id_news = js_id.getInt( "Id" );
if (getArguments().getInt( ARG_SECTION_NUMBER ) != 0)//"page=0&tagid="
new ApiNews( getActivity(), (ArrayAdapter) listMain.getAdapter(), rootView, ly_dialog ).execute( "id=" + static_id_news + "&tagid=" + newsnum[getArguments().getInt( ARG_SECTION_NUMBER )] + "&page=" + scroll_last_page + 1, 2 );
else
new ApiNewsPaper( getActivity(), (ArrayAdapter) listMain.getAdapter(), rootView, ly_dialog ).execute( lastpage[getArguments().getInt( ARG_SECTION_NUMBER )] );
} catch (JSONException e) {
e.printStackTrace();
}
}
}
}
});
现在我想要像示例一样,它将获取 row
的 id 并将其发送以加载更多数据。谢谢。
最佳答案
为 recyclerview
尝试这个解决方案
你应该使用 recyclerview
,它比 listview
更好,因为它速度快,复杂度低,并且像交错 View 一样可以自定义
private int pastVisiblesItems, visibleItemCount, totalItemCount;
private boolean loading = true;
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
if (dy > 0) //check for scroll down
{
visibleItemCount = gridLayoutManager1.getChildCount();
totalItemCount = gridLayoutManager1.getItemCount();
pastVisiblesItems = gridLayoutManager1.findFirstVisibleItemPosition();
if (loading) {
if ((visibleItemCount + pastVisiblesItems) >= totalItemCount) {
loading = false;
//Do pagination.. i.e. fetch new data
}
}
}
}
});
并将加载设置为 true 以响应您的 api
,就像在成功和失败的情况下一样
loading = true;
其中 gridLayoutManager1
是布局管理器,它可以是 linearlayout
和 gridlayout
也可以,取决于你的 recyclerview
recyclerViews.setLayoutManager(gridLayoutManager1);
关于java - 如何修复分页以在 RecyclerView 中从服务器加载更多数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53986193/