본문 바로가기
Android/Technic

ViewPager2(FragmentStateAdapter)에서 화면이 reload되는 현상 해결법 (ViewPager2 + FragmentStateAdapter + BottomNavigationView)

by 등촌동 꼬북이 2021. 11. 5.

이번에 ViewPager2 + FragmentStateAdapter + BottomNavigationView를 구현하여 화면을 구성했다..

 

구글에 널려있는 코드로 FragmentStateAdapter를 아래와 같이 구현했다.

 

// Sample code이기 때문에 NUM_PAGES와 실제 switch문의 차이는 있습니다.

private final int NUM_PAGES = 4;

class fragmentAdapter extends FragmentStateAdapter {
    public fragmentAdapter(@NonNull FragmentManager fragmentManager, @NonNull Lifecycle lifecycle) {
        super(fragmentManager, lifecycle);
    }
    @NonNull
    @Override
    public Fragment createFragment(int position) {
        switch (position) {
            case 0:
                return new SampleFragment();
            case 1:
                return new TestFragment();
            default:
                return null;
        }
    }
    @Override
    public int getItemCount() {
        return NUM_PAGES;
    }
}

 

BottomNavigationView로 하단 메뉴를 구현했기 때문에 막 이래저래 눌러보는데 갑자기 CreateFragment를 한번 더 실행하면서 SampleFragment가 다시 onCreateView를 실행하고 webView가 reload가 되는 기현상이 생겼다.. 내 예상과는 완전 다른 현상... SampleFragment에는 webView가 있었는데 왜 이런 현상이 있지.. 또 어떻게 해결해야하지 싶어서 고민해봤는데.. 아주 쉽게 해결했다.

 

코드를 아래와 같이 구현했다.

 

private final int NUM_PAGES = 4;

viewPager2.setAdapter(new fragmentAdapter(fragmentManager, getLifecycle()));
viewPager2.setOffscreenPageLimit(NUM_PAGES);

 

이렇게 하니까 더이상 페이지를 갱신하거나 Adapter를 초기화 하지 않고 기존의 것을 끌어다가 보여줬다.

댓글