java - 如何修复分页以在 RecyclerView 中从服务器加载更多数据?

标签 java android android-recyclerview

我想从服务器加载更多数据。我应该从 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 是布局管理器,它可以是 linearlayoutgridlayout 也可以,取决于你的 recyclerview

 recyclerViews.setLayoutManager(gridLayoutManager1);

关于java - 如何修复分页以在 RecyclerView 中从服务器加载更多数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53986193/

相关文章:

java - 使用 JDBC 连接器 5.1 从 Java 读取/写入 MySQL 中的 UTF-8 数据时出现问题

java - hibernate/JPA : IllegalArgumentException: Not an entity

java - UNIQUE 约束失败 : sqlite database : android

java - 单击 RecyclerView 项目后禁用按钮时出现问题

android - 从 Sqlite 游标创建 Pojo 类需要太多时间

java - 如何使用关键字过滤 RSS 提要?

java - 使用 Google 地球插件管理气球的最明智方法是什么?

安卓工作室 : Unresolved symbol "Theme" in styles. xml

android - 使用 WorkManager 更新 Room 中的数据库条目

java - 将字符串发送到 RecyclerViewHolder 中的 onClick