我知道标题看起来很奇怪,但基本上我想要的是将分页应用到我的列表并使用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"
}
...
..
.
]
}
我捆绑了所有东西,但无法正确完成,我已经尝试了 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();
}
});
}
}
答案 0 :(得分:1)
以下是我在项目中的表现...在这种情况下,我会在列表底部添加更多元素
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)
答案 1 :(得分:1)
一段时间后,我使用 Paginate Library
进行了此操作守则
public class ChallengesListFragment extends BaseFragment implements OnRefreshListener, Paginate.Callbacks {
// other variables..
private int currentPage = 1;
private boolean hasMore;
private boolean loadingInProgress;
@RequiresApi(api = VERSION_CODES.LOLLIPOP)
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_challenges_list, container, false);
initView(rootView);
initToolbar();
initRecycler();
getData();
return rootView;
}
private void initRecycler() {
data = new ArrayList<>();
mLayoutManager = new LinearLayoutManager(getActivity());
recyclerview.setLayoutManager(mLayoutManager);
adapter = new ChallengesAdapter(data, getActivity(), this);
recyclerview.setAdapter(adapter);
Paginate.with(recyclerview, this)
.setLoadingTriggerThreshold(3)
.addLoadingListItem(false)
.build();
}
private void getData() {
swipeRefresh.setRefreshing(true);
WebRequests.GetActiveChallenges(currentPage, new onResult() {
@Override
public void onSuccess(Object object) {
ArrayList<Challenge> list = (ArrayList<Challenge>) object;
data.addAll(list);
adapter.notifyDataSetChanged();
if (list.size() == 10) {
currentPage++;
hasMore = true;
} else {
hasMore = false;
}
loadingInProgress = false;
swipeRefresh.setRefreshing(false);
}
@Override
public void onFail(Object object) {
Toast.makeText(getActivity(), "Something went wrong, try again later",
Toast.LENGTH_SHORT).show();
swipeRefresh.setRefreshing(false);
}
});
}
public ChallengesListFragment() {
}
@Override
public void onRefresh() {
currentPage = 1;
loadingInProgress = true;
getData();
}
@Override
public void onLoadMore() {
loadingInProgress = true;
Handler mHandler = new Handler();
final Runnable hintRunnable = new Runnable() {
@Override
public void run() {
getData();
}
};
mHandler.postDelayed(hintRunnable, 1500);
}
@Override
public boolean isLoading() {
return loadingInProgress;
}
@Override
public boolean hasLoadedAllItems() {
return !hasMore;
}
}