import
android.os.Bundle;
import
android.view.View;
import
android.widget.ProgressBar;
import
android.widget.Toast;
import
androidx.appcompat.app.AppCompatActivity;
import
androidx.core.widget.NestedScrollView;
import
androidx.recyclerview.widget.LinearLayoutManager;
import
androidx.recyclerview.widget.RecyclerView;
import
com.android.volley.Request;
import
com.android.volley.RequestQueue;
import
com.android.volley.Response;
import
com.android.volley.VolleyError;
import
com.android.volley.toolbox.JsonObjectRequest;
import
com.android.volley.toolbox.Volley;
import
org.json.JSONArray;
import
org.json.JSONException;
import
org.json.JSONObject;
import
java.util.ArrayList;
public
class
MainActivity
extends
AppCompatActivity {
private
ArrayList<UserModal> userModalArrayList;
private
UserRVAdapter userRVAdapter;
private
RecyclerView userRV;
private
ProgressBar loadingPB;
private
NestedScrollView nestedSV;
int
page =
0
, limit =
2
;
@Override
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
userModalArrayList =
new
ArrayList<>();
userRV = findViewById(R.id.idRVUsers);
loadingPB = findViewById(R.id.idPBLoading);
nestedSV = findViewById(R.id.idNestedSV);
getDataFromAPI(page, limit);
nestedSV.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()) {
page++;
loadingPB.setVisibility(View.VISIBLE);
getDataFromAPI(page, limit);
}
}
});
}
private
void
getDataFromAPI(
int
page,
int
limit) {
if
(page > limit) {
Toast.makeText(
this
,
"That's all the data.."
, Toast.LENGTH_SHORT).show();
loadingPB.setVisibility(View.GONE);
return
;
}
RequestQueue queue = Volley.newRequestQueue(MainActivity.
this
);
JsonObjectRequest jsonObjectRequest =
new
JsonObjectRequest(Request.Method.GET, url,
null
,
new
Response.Listener<JSONObject>() {
@Override
public
void
onResponse(JSONObject response) {
try
{
JSONArray dataArray = response.getJSONArray(
"data"
);
for
(
int
i =
0
; i < dataArray.length(); i++) {
JSONObject jsonObject = dataArray.getJSONObject(i);
userModalArrayList.add(
new
UserModal(jsonObject.getString(
"first_name"
), jsonObject.getString(
"last_name"
), jsonObject.getString(
"email"
), jsonObject.getString(
"avatar"
)));
userRVAdapter =
new
UserRVAdapter(userModalArrayList, MainActivity.
this
);
userRV.setLayoutManager(
new
LinearLayoutManager(MainActivity.
this
));
userRV.setAdapter(userRVAdapter);
}
}
catch
(JSONException e) {
e.printStackTrace();
}
}
},
new
Response.ErrorListener() {
@Override
public
void
onErrorResponse(VolleyError error) {
Toast.makeText(MainActivity.
this
,
"Fail to get data.."
, Toast.LENGTH_SHORT).show();
}
});
queue.add(jsonObjectRequest);
}
}