동적로딩을 만들었는데, 더보기 버튼을 누르면 내용이 반쪽이 사라져버린다.
거의 코드만 30번 넘게 뜯어고치고 개XX 발광 다떨어봐도 해결이 안되서 죽상이었다.
StackOverFlow에도 나오질 않았는데 우연히 해결되었다.
일단 동적로딩부터 !
불러오자마자 초기데이터를 넣어버린다. 나는 5개씩 불러오려고 했기 때문에 now 인덱스가 5개이다.
private void loadData() { mAdapter.addAll(pagingList.get(nowindex)); }
onLoadMore는 스크롤 끝까지 닿았을때 호출되는 메소드이다.
@Override public void onLoadMore() { Log.d("MainActivity_", "onLoadMore"); if (StartCount >nowindex) { mAdapter.setProgressMore(true); new Handler().postDelayed(new Runnable() { @Override public void run() { mAdapter.setProgressMore(false); ///////이부분에을 자신의 프로젝트에 맞게 설정하면 됨 //다음 페이지? 내용을 불러오는 부분 로직개선 해야함. mAdapter.addItemMore(pagingList.get(nowindex)); mAdapter.setMoreLoading(false); } }, 3000); } nowindex = nowindex + 1; }
그냥 써도 되지만 로딩 이쁘게 만들기위해서 로딩중일때 Data에 빈껍데기를 하나 만들어 넣고 거기에 프로세스 bar를 집어넣는다. 만약 끝났으면 Progressbar 제거
public void setProgressMore(final boolean isProgress) { if (isProgress) { new Handler().post(new Runnable() { @Override public void run() { mData.add(null); notifyItemInserted(mData.size() - 1); } }); } else { mData.remove(mData.size() - 1); notifyItemRemoved(mData.size()); } }
이건 페이징 처리 공식이므로 건들지 말고 붙이자
public void setRecyclerView(RecyclerView mView) { mView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); visibleItemCount = recyclerView.getChildCount(); totalItemCount = mLinearLayoutManager.getItemCount(); firstVisibleItem = mLinearLayoutManager.findFirstVisibleItemPosition(); lastVisibleItem = mLinearLayoutManager.findLastVisibleItemPosition(); Log.d("total", totalItemCount + ""); Log.d("visible", visibleItemCount + ""); Log.d("first", firstVisibleItem + ""); Log.d("last", lastVisibleItem + ""); if (!isMoreLoading && (totalItemCount - visibleItemCount) <= (firstVisibleItem + visibleThreshold)) { if (onLoadMoreListener != null) { onLoadMoreListener.onLoadMore(); } isMoreLoading = true; } } });
Nested Scroll View를 쓰자
<androidx.core.widget.NestedScrollView android:layout_width="match_parent" android:layout_height="484dp" android:fillViewport="true"> <androidx.recyclerview.widget.RecyclerView android:id="@+id/RecycleView_notice" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginTop="50dp" /> </androidx.core.widget.NestedScrollView>
원래는 CoordinateLayout이였으나, 이것이 문제인줄알고, LinearLayout도 써보고
했으나 결과는 실패. Nested Scroll View를 담으니까 해결이 되었다.
참 다루면 다룰수록 재밌으면서도 힘든 Android Studio 다음엔 더 재미있는 소재로 찾아오겠다.