밍쯔와 안작고 안귀여운 에러들🖤

[Android/Java] scrollView, recyclerView, firstVisiblePosition = 0 본문

Develop/Android | iOS

[Android/Java] scrollView, recyclerView, firstVisiblePosition = 0

밍쯔 2023. 4. 14. 17:21

scrollview 안에서는 firstVisibleItem, visibleItemCount 등등이 안된다! 다 한번에 로드되는거임,,,,

 

왤케 무한 스크롤링에서 페이징이 제대로 작동안하고 버벅거리나 했더니••• 이게 다 구조때문,,,!

 

[문제]

scrollView 안에 recyclerview를 생성할 경우, recyclerview가 한번에 생성되기 때문에 이미지를 전부 로딩해서 size가 많으면 캐싱 문제가 생겨서 엄청 버벅거린다.

왜 scrollview 안에 recyclerview를 만드는 멍청한 짓을해? 라고 생각하실 수도 있습니다•••

디자인 상으로 아이템 리스트 위에 구분선이 있는데, 스크롤시 함께 움직여야해서 그냥 단순하게 넣었더니

리스트의 개수가 100개 정도되는 순간 엄청 버벅거리는걸 발견하고 뒤늦게 문제가 된다는걸 알아따•••

뷰가 한번에 다 생성되니 아래로 쭉 리스트가 만들어지는게 보임

 

 

[해결]

당연히 scrollView는 제거했고 adapter 내에서 viewType을 활용해서 

상단 divider, 무한 로딩시 필요한 progressBar, 생성되어야 할 item 으로 구분시켰다 !

각자 필요에 따라 구조나 조건을 변경하면 될 것 같다~

 @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        if (viewType == TYPE_LOADING) {
            View loadingView = LayoutInflater.from(parent.getContext()).inflate(R.layout.progress_bar, parent, false);
            return new StoreFragmentSearchAdapter.ProgressViewHolder(loadingView);
        } else if (viewType == TYPE_DIVIDER) {
            View DividerView = LayoutInflater.from(parent.getContext()).inflate(R.layout.divider_no_margin, parent, false);
            return new DividerViewHolder(DividerView);
        } else {
            ItemStoreVerticalBinding binding = ItemStoreVerticalBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false);
            return new StoreFragmentSearchAdapter.VerticalViewHolder(binding);
        }
    }

보여지는만큼만 뷰가 생성, 실제 바인딩 이후 스크롤 할때마다 보여지는만큼 생성