我知道标题看起来很奇怪,但基本上我想要的是对我的列表应用分页并使用 url api 端点作为参数来控制它。!
因此端点看起来像这样> www.someapi.com/josn/list?pageIndex=1
它将给出包含 10 个项目的数组的响应,如果我想要更多,我必须将参数的索引更改为 2 等等。!
回应
{
"Succeeded": true,
"AvailableChallenge": true,
"DebugError": "",
"NextPage": 2,
"AllPages": 2,
"Challenges": [
{
"ID": 114,
"Title": "Amet sit id ratione dolorem numquam"
},
{
"ID": 114,
"Title": "Amet sit id ratione dolorem numquam"
}
...
..
.
]
}
我绑定(bind)了所有内容,但无法正确完成,我已经尝试了here中的大部分解决方案并且没有运气。 我也尝试过使用这两个库 Paginate & recyclerview-paginated 甚至这个 SuperRecyclerView 。但没有成功。!
任何有关控制此问题的最佳逻辑的帮助都会有很大帮助。
<小时/>public class ChallengesListFragment extends BaseFragment {
private int pageNumber = 1;
private SuperRecyclerView recyclerview;
private ArrayList<ChallengeActive> data;
private ChallengesAdapter adapter;
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_challenges_list, container, false);
initView(rootView);
initRecycler();
getData(1);
return rootView;
}
private void initRecycler() {
data = new ArrayList<>();
final RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getActivity());
recyclerview.setLayoutManager(mLayoutManager);
adapter = new ChallengesAdapter(data, getActivity(), this);
recyclerview.setAdapter(adapter);
recyclerview.setupMoreListener(new OnMoreListener() {
@Override
public void onMoreAsked(int overallItemsCount, int itemsBeforeMore, int maxLastVisiblePosition) {
pageNumber++;
getData(maxLastVisiblePosition);
}
}, 10);
recyclerview.setRefreshListener(new OnRefreshListener() {
@Override
public void onRefresh() {
pageNumber = 1;
getData(pageNumber);
}
});
}
private void getData(final int pageNumber) {
WebRequests.GetActiveChallenges(pageNumber, new onResult() {
@Override
public void onSuccess(Object object) {
ArrayList<ChallengeActive> list = (ArrayList<ChallengeActive>) object;
data.clear();
data.addAll(list);
adapter.notifyDataSetChanged();
}
@Override
public void onFail(Object object) {
Toast.makeText(getActivity(), "Something went wrong, try again later",
Toast.LENGTH_SHORT).show();
}
});
}
}
最佳答案
这是我在项目中的做法...在本例中,当到达列表底部时我添加更多元素
rv_flohtainer_events.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
if (!rv_flohtainer_events.canScrollVertically(1)){
if (!(eventsResponse.getCurrent_page() == eventsResponse.getLast_page())) {
pageEventsRequest++;
makeVendorEventsRequest();
}
}
}
});
我做的请求是改造,看起来像这样
@GET(RestClient.API_EVENTS_URL)
Call<EventsResponse> getEvents(@Query("page") int page)
关于java - 如何通过 api url 索引使用 recyclerview 实现分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47429347/