728x90
해당 소스 코드는 리사이클러 뷰의 스크롤의 설명을 위한 코드입니다.
어댑터 구성과, 자세한 리사이클러 뷰의 구현은 생략되었습니다.
자세한 사항은 아래의 깃허브에서 확인 가능합니다.
// todo : 깃허브 주소 입력
1. 리사이클러 뷰의 스크롤링 메소드
- onScrollStateChanged : 스크롤의 상태가 변경 되었을 경우 1번 실행, 앱을 간소화 할 때 사용
- onScrolled : 스크롤 될 때 실행, 즉 반응형으로 코드를 작성 할 수 있음
// 스크롤
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
}
@Override
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
// 맨 마지막 데이터가 화면에 보이면!!!!
// 네트워크 통해서 데이터를 추가로 받아와라!!
int lastPosition = ((LinearLayoutManager)recyclerView.getLayoutManager()).findLastCompletelyVisibleItemPosition();
int totalCount = recyclerView.getAdapter().getItemCount();
// 스크롤을 데이터 맨 끝까지 한 상태
if(lastPosition+1 == totalCount){
// 네트워크 통해서 데이터를 받아오고 화면에 표시한다!
addNetworkData();
}
}
});
addNetworkData();
네트워클 통해서 데이터를 받아오고 화면에 표시하는 함수
private void addNetworkData(){
// 유튜브 API 호출
RequestQueue queue = Volley.newRequestQueue(MainActivity.this);
String URL = Config.BASE_URL + Config.PATH + "?key=" + Config.API_KEY + "&part=snippet&q=" + keyword + "&maxResults=20&pageToken="+pageToken;
JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, URL, null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
progressBar.setVisibility(View.GONE);
try {
pageToken = response.getString("nextPageToken");
JSONArray items = response.getJSONArray("items");
for(int i=0;i<items.length();i++){
// 네트워크 데이터 파싱작업
JSONObject item = items.getJSONObject(i);
String videoId = item.getJSONObject("id").getString("videoId");
String title = item.getJSONObject("snippet").getString("title");
String description = item.getJSONObject("snippet").getString("description");
String mediumUrl = item.getJSONObject("snippet").getJSONObject("thumbnails").getJSONObject("medium").getString("url");
String highUrl = item.getJSONObject("snippet").getJSONObject("thumbnails").getJSONObject("high").getString("url");
// 위에서 파싱 후 변수로 저장후에 객체생성
Video video = new Video(videoId,title,description,mediumUrl,highUrl);
// recyclerView에 보여주기위해 ArrayList에 저장
videoList.add(video);
}
} catch (JSONException e) {
return;
}
adapter.notifyDataSetChanged();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
progressBar.setVisibility(View.GONE);
}
});
progressBar.setVisibility(View.VISIBLE);
queue.add(request);
'Android Studio' 카테고리의 다른 글
Android - 네트워크 통신 Retrofit2 Library (0) | 2023.02.09 |
---|---|
Android - ProgressDialog (0) | 2023.02.09 |
Android - Intent 활용 - 주소록, 웹페이지, 메시지, 이메일 (0) | 2023.02.07 |
Android - 이미지 처리 Library Glide (0) | 2023.02.07 |
Android - 액션바 타이틀, Back 버튼 설정법과 / FAB(FloatingActionButton) 사용법 (0) | 2023.02.06 |