I need to do pagination for recyclerview. That load 20 data firstly. After scroll, it must load 20 data more. But it load this 20 data as a new list and delete old 20 data. How can add them end of first 20? I tried some different ways but I couldn't get JsonArray succesfully.
FirstFragment.java
public class FirstFragment extends Fragment {
RecyclerView recyclerView;
private ArrayList<UserOrder> userOrders;
OrderByPointsAdapter orderByPointsAdapter;
ProgressBar progressBarMain, progressBarRecy;
private NestedScrollView nestedScrollView;
private int xo=0,yo=20;
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.row_first, container, false);
progressBarRecy = view.findViewById(R.id.progressBarFirstRecy);
nestedScrollView = view.findViewById(R.id.nestedRowFirst);
recyclerView = view.findViewById(R.id.recyclerFirstRow);
recyclerView.setHasFixedSize(true);
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity().getApplicationContext());
recyclerView.setLayoutManager(layoutManager);
loadRecycler(xo,yo);
nestedScrollView.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener() {
@Override
public void onScrollChange(NestedScrollView v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
if (scrollY == v.getChildAt(0).getMeasuredHeight() - v.getMeasuredHeight()){
xo = xo+20;
yo = yo +20;
progressBarRecy.setVisibility(View.VISIBLE);
loadRecycler(xo, yo);
}
}
});
return view;
}
private void loadRecycler(int xo, int yo) {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://192.168.0.35/")
.addConverterFactory(GsonConverterFactory.create())
.build();
//RequestInterface ekliyoruz
RequestInterface request = retrofit.create(RequestInterface.class);
Call<JsonResponse> call = request.getJSON(String.valueOf(xo),String.valueOf(yo));
call.enqueue(new Callback<JsonResponse>() {
@Override
public void onResponse(Call<JsonResponse> call, Response<JsonResponse> response) {
if (response.isSuccessful() && response.body()!= null){
progressBarRecy.setVisibility(View.GONE);
JsonResponse jsonResponse = response.body();
userOrders = new ArrayList<>(Arrays.asList(jsonResponse.getUserOrders()));
orderByPointsAdapter = new OrderByPointsAdapter(userOrders,getActivity().getApplicationContext());
recyclerView.setAdapter(orderByPointsAdapter);
}
}
});
}
What's Happening?
We are setting the order list from the last response to the recycler view adapter every time. Use the below snippet in the onResponse
function to fix it.
Solution
if (response.isSuccessful() && response.body()!= null){
progressBarRecy.setVisibility(View.GONE);
JsonResponse jsonResponse = response.body();
if(userOrders == null) {
userOrders = new ArrayList<>(Arrays.asList(jsonResponse.getUserOrders()));
} else {
userOrders.addAll(Arrays.asList(jsonResponse.getUserOrders()));
}
orderByPointsAdapter = new OrderByPointsAdapter(userOrders,getActivity().getApplicationContext());
recyclerView.setAdapter(orderByPointsAdapter);
}
Optimisation Tips
userOrders
list.ListAdapter
instead of RecyclerView.Adapter
for OrderByPointsAdapter
.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.