하루동안 삽질한 Recycle View & 동적로딩 만들기

0

안드로이드

목록 보기
12/19

동적로딩을 만들었는데, 더보기 버튼을 누르면 내용이 반쪽이 사라져버린다.
거의 코드만 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 다음엔 더 재미있는 소재로 찾아오겠다.

profile
쉽게 가르칠수 있도록 노력하자

0개의 댓글