[CymChad/BaseRecyclerViewAdapterHelper]上拉加载 onLoadMoreRequested 无限回调

2024-08-08 168 views
4

activity 布局

 <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <!--需要加载的recyclerVoice-->
        <android.support.v7.widget.RecyclerView
            android:id="@+id/recyclerView"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

        <LinearLayout
            android:id="@+id/popup_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:visibility="gone">

            <android.support.v7.widget.RecyclerView
                android:id="@+id/sort_recyclerView"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />

            <View
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:alpha="0.5"
                android:background="#000000" />
        </LinearLayout>

//recyclerView 初始化 myAdapter = new HolidaySortAdapter(R.layout.item_holiday_sort, context); recyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)); myAdapter.setOnLoadMoreListener(this, recyclerView);

//加载 @Override public void onLoadMoreRequested() { page++; postOkgo(1); myAdapter.loadMoreComplete();

}

private void postOkgo(final int tag) { showProgressDialog(); JSONObject jsonObject = new JSONObject(); try { jsonObject.put("cityCode", cityCode); jsonObject.put("kindCode", typeCode); jsonObject.put("keyWords", keyWords); jsonObject.put("soft", soft); jsonObject.put("longitude", MyApp.getApplication().getCurrentLongitude()); jsonObject.put("latitude", MyApp.getApplication().getCurrentLatitude()); jsonObject.put("page", page); jsonObject.put("pageSize", 1); } catch (JSONException e) { e.printStackTrace(); } OkGoHttp.getInstance().okGoPost(context, Constants.GetVacationPoi, jsonObject, new OkGoHttp.OnNetResultListener() { @Override public void onSuccessful(String resultStr) { closeProgressDialog(); HolidaySortData data = gson.fromJson(resultStr, HolidaySortData.class); sortDatas = data.getResult().getData(); if (tag == 0) { myAdapter.setNewData(sortDatas); recyclerView.setAdapter(myAdapter); mRefreshLayout.finishRefresh(); // myAdapter.setEnableLoadMore(true); } //加载 if (tag == 1) { if (data.getResult().getData().size() == 0) { myAdapter.loadMoreEnd(); } else { for (int i = 0; i < data.getResult().getData().size(); i++) { myAdapter.addData(data.getResult().getData().get(i));

                    }
                }
                mRefreshLayout.setEnableRefresh(true);
            }
        }

        @Override
        public void onFailure(String errMsg) {

        }
    });
}

回答

3

myAdapter.loadMoreComplete();应该放在你请求加载成功的回调里面。

0

@CymChad OkGoHttp.getInstance().okGoPost(context, Constants.GetVacationPoi, jsonObject, new OkGoHttp.OnNetResultListener() { @Override public void onSuccessful(String resultStr) { closeProgressDialog(); HolidaySortData data = gson.fromJson(resultStr, HolidaySortData.class); sortDatas = data.getResult().getData(); if (tag == 0) { myAdapter.setNewData(sortDatas); recyclerView.setAdapter(myAdapter); mRefreshLayout.finishRefresh(); // myAdapter.setEnableLoadMore(true); } if (tag == 1) { if (data.getResult().getData().size() == 0) { myAdapter.loadMoreEnd(); } else { for (int i = 0; i < data.getResult().getData().size(); i++) { myAdapter.addData(data.getResult().getData().get(i));

                    }
                }
                myAdapter.loadMoreComplete();
                //放在这里  还是无限加载
                mRefreshLayout.setEnableRefresh(true);
            }
        }

        @Override
        public void onFailure(String errMsg) {
7

你是不是没有掉用过myAdapter.loadMoreEnd();

3

if (tag == 1) { //在这判断的请求数据 如果size==0 调用 myAdapter.loadMoreEnd(); if (data.getResult().getData().size() == 0) { myAdapter.loadMoreEnd(); } else { for (int i = 0; i < data.getResult().getData().size(); i++) { myAdapter.addData(data.getResult().getData().get(i));

                    }
                }
                myAdapter.loadMoreComplete();
                //放在这里  还是无限加载
                mRefreshLayout.setEnableRefresh(true);
            }
        }
8

@CymChad 我在数据返回为0条时 调用的myAdapter.loadMoreEnd();

4

你log看过吗?是不是没有调用myAdapter.loadMoreEnd();?理论上只要你有数据的时候并且还有下一页调用了 myAdapter.loadMoreComplete();最后一页了调用了myAdapter.loadMoreEnd();,就不存在无限加载。

1

@CymChad myAdapter.loadMoreEnd();是必须使用的吗 我把官方的Demo改了一下

@Override
public void onLoadMoreRequested() {
    Log.d("PullToRefreshUseActivit", "加载");
    pullToRefreshAdapter.addData(DataServer.getSampleData(PAGE_SIZE));
    mCurrentCounter = pullToRefreshAdapter.getData().size();
    pullToRefreshAdapter.loadMoreComplete();

//只调用这3行 不会出现无限加载

    //这些全不要了

// if (mCurrentCounter >= TOTAL_COUNTER) { //// pullToRefreshAdapter.loadMoreEnd();//default visible // pullToRefreshAdapter.loadMoreEnd(mLoadMoreEndGone);//true is gone,false is visible // } else { // if (isErr) { // pullToRefreshAdapter.addData(DataServer.getSampleData(PAGE_SIZE)); // mCurrentCounter = pullToRefreshAdapter.getData().size(); // pullToRefreshAdapter.loadMoreComplete(); // } else { // isErr = true; // Toast.makeText(PullToRefreshUseActivity.this, R.string.network_err, Toast.LENGTH_LONG).show(); // pullToRefreshAdapter.loadMoreFail(); // // } // } // mSwipeRefreshLayout.setEnabled(true);

4

myAdapter.loadMoreEnd(); 是必须的。你如果只有3行这个代码你可以试试一直往上滑动。肯定是无限加载

4

@CymChad 但是的我 myAdapter.loadMoreEnd(); 确实调用到了 ,而且 myAdapter.loadMoreComplete();也是在请求成功的回调了 使用的 但是还会出现无限加载的情况
不知道扎回事

8

myAdapter.loadMoreEnd(); 之后还调用了myAdapter.loadMoreComplete();吗?

5

对的 请求成功之后 我判断数据.size==0 如果等于0就调用myAdapter.loadMoreEnd(); 否则就添加数据 myAdapter.addData() 之后调用的myAdapter.loadMoreComplete()

8

你应该在先调用adapter的loadMoreComplete()或者loadMoreEnd(),再往adapter里面添加数据

0

我的Adapter 只是在onCreate()中初始化了一次啊 myAdapter = new HolidaySortAdapter(R.layout.item_holiday_sort, context);
是 recyclerView.setAdapter(myAdapter); 的问题吗? recyclerView.setAdapter(myAdapter);我只在请求成功的时候调用了 加载的时候我都没调用

6

你试试我说的方式吧

6

好的 谢谢你了

4

不客气

2

@LambdaV5 正解

8

使用这个 BaseSectionQuickAdapter 会出现无限加载